我正在尝试将输出列表写入文件,但只从列表中获取实际写入文件的最后一行。如何更改我的代码以便捕获所有内容?
import os
slices = [(0,3), (12,28), (29,31), (32,33), (34,38), (130,144), (39,41), (32,33), (42,55), (58,64), (65,72), (73,74), (75,78), (79,84), (99,102)]
File = r"E:\file.txt"
outfile = r"E:\file_output.txt"
with open(File) as sourcefile:
for line in sourcefile:
result = [line[slice(*slc)] for slc in slices]
myfile = open(outfile, 'w')
for lines in result:
myfile.write("%s\t" % lines)
myfile.close()
答案 0 :(得分:2)
你的for循环每次重复都会重新分配result
。因此,在循环结束时result
仍然只有一个列表。在循环之前分配myfile
,并将myfile.write
语句放在循环中。
myfile = open(outfile, 'w')
for line in sourcefile:
result = [line[slice(*slc)] for slc in slices]
myfile.write("%s\t" % result)
或者,如果您想要列出所有结果,可以使用+=
获取列表列表,如
result += [line[slice(*slc)] for slc in slices]
答案 1 :(得分:1)
每次在“for sourcefile”块中进行迭代时,都会覆盖“结果”列表。这就是为什么你最终只得到存储在“结果”
中的最后一行要解决此问题,您可以扩展列表理解并完全删除for循环:
result = [line[slice(*slc) for slc in slices for line in sourcefile]