我有这个函数,它接受一个列表并将其打印到outfile:
def writeToFile(files):
for path2 in files:
fi= open(fileo, 'w')
fi.truncate()
fi.write('\n' + str(foundFiles2))
fi.close()
foundFiles2 = [
'bb.TechnicalDefinition.UnitTests.vbproj'
'bb.Units.UnitTests.vbproj'
'bb.Utilities.UnitTests.vbproj'
'bb.Visualization.UnitTests.vbproj' ]
它打印到文件没有问题,但我希望它在列表中的每个元组后打印一个新行。但是,当它写入文件时,它看起来像这样:
'bb.APDS.UnitTests.vbproj', 'bb.DatabaseAPI.UnitTests.vbproj', 'bb.DataManagement.UnitTests.vbproj',
我以为
fi.write('\n' + str(foundFiles2))
会在新行上分别打印出每个元组,但事实并非如此。我在这里需要一个循环吗?或者我的语法是否完全错误?
答案 0 :(得分:1)
您应该遍历列表而不是打印它的str
版本。
>>> lis = [1,2,3]
>>> str(lis) #str just returns a string representation of the string
'[1, 2, 3]'
>>> for x in lis : #use for loop to iterate over individual items of the list
... print x
...
1
2
3
您的代码:
for path2 in files:
#"w" mode automatically truncates the file for you
# Always use `with` statement for handling files, it automatically
# closes the file.
with open(fileo,"w") as f:
for text in foundFiles2: #iterate over each value in the list
f.write(text+"\n")
答案 1 :(得分:1)
在for
循环之前打开文件并在for循环之后关闭文件(或者像ashwini建议的那样使用with
,因为它会自动执行此操作。)
您采用的方式是,它只会反复编写相同的foundFiles2
列表,具体取决于files
中的索引数量。
如果foundFiles2
是您要迭代的列表,那么您需要在for
语句中使用它:
for item in foundFiles2:
fi.write(item+'\n')
这将转到第一个项目,然后写入,然后是第二个项目,然后将其写入等等。