我正在写文件到磁盘但是在我写之前我将所有项目从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方法的内容时,我做错了什么?
答案 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
这样,您就可以在循环的每次迭代中将字符串附加到文本变量,而不是将变量重新分配给新字符串。