Python 为什么我只得到最后一个写入文件的条目

Python 为什么我只得到最后一个写入文件的条目,python,string,list,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).te

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

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


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

存在错误:在每个循环中

text="echo [Task Id:%s]\n" % each
它转储上一次迭代中保留的任何
文本。相反,你应该这样做

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

您正在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

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

不要使用
,除非:pass
,否则会隐藏写入过程中出现的任何问题,并使调试变得困难。