0

我正在将文件写入磁盘,但在写入之前,我将 QListWidget 中的所有项目收集到文本变量中,每行由“\n”分隔,但我没有得到所有行,而是只得到最后一行:

def makeBatFile(self):
    text=""
    for each in xrange(self.listWidget.count()):
        text="echo [Task Id:%s]\n" % each
        text=text+ self.listWidget.item(each).text() +"\n"
        print text
    self.writeBatFile("batch",text)

尽管 for 循环内的 print 打印了所有行,但我无法从 for 循环内调用 writeBatfile 方法,因为当我想要写入所有列表项时,它将尝试将列表中的项目数写入文件在一个文件中...

def writeBatFile(self,do="single",task=None):
    self.task=task
    now = datetime.datetime.now()

    buildCrntTime=str(now.hour) +"_" + str(now.minute)
    selected=str(self.scnFilePath.text())
    quikBatNam=os.path.basename(selected).split(".")[0]+"_"+buildCrntTime+".bat"
    if do !="batch":
        self.batfiletoSave=os.path.join(os.path.split(selected)[0],quikBatNam)
        self.task = str(self.makeBatTask())
    else:
        self.batfiletoSave=os.path.join(self.batsDir,buildCrntTime+".bat")
    try:
        writeBat=open(self.batfiletoSave,'w')
        writeBat.write(self.task)
        self.execRender()
    except: pass
    finally: writeBat.close()

在构建要传递给 writeBatFile 方法的内容时我做错了什么?

4

3 回答 3

1

您正在重新定义的每次迭代texttext=因此不再引用上一次循环迭代的值,因此只有text循环的最终迭代中的值被传递给writeBatFile

一种解决方案是在每次迭代中创建一个列表makeBatFile并在其中附加text变量。然后可以通过将其传递到writeBatFile文件中并将其写入文件.writelines

于 2012-12-11T18:47:39.757 回答
0

有一个错误:在你做的每个循环中

text="echo [Task Id:%s]\n" % each

它会转储text上一次迭代中的任何内容。相反,做

text += "echo [Task Id:%s]\n" % each
于 2012-12-11T18:49:17.433 回答
0

您正在 for 循环的每个循环中覆盖您的文本变量。您应该将每一行附加到文本变量:

def makeBatFile(self):
    text=""
    for each in xrange(self.listWidget.count()):
        text += "echo [Task Id:%s]\n" % each
        text += self.listWidget.item(each).text() +"\n"
        print text
    self.writeBatFile("batch",text)

+= 运算符是以下操作的快捷方式:

text = text + othertext

这样,您将在循环的每次迭代中将字符串附加到文本变量,而不是将变量重新分配给新字符串。

于 2012-12-11T18:50:02.787 回答