为什么我只能将最后一个条目写入文件

时间:2012-12-11 18:36:35

标签: python string list

我正在写文件到磁盘但是在我写之前我将所有项目从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方法的内容时,我做错了什么?

3 个答案:

答案 0 :(得分:1)

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

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

写入文件

答案 1 :(得分:0)

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

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

转储前一次迭代中保存的text。相反,做

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

答案 2 :(得分: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

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