1

我正在尝试将输出列表写入文件,但仅从列表中获取最后一行以实际写入文件。如何更改我的代码以捕获所有内容?

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()
4

2 回答 2

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] 
于 2012-07-25T15:26:12.223 回答
1

每次在“for line in sourcefile”块中迭代时,都会覆盖“result”列表。这就是为什么您最终只将最后一行存储在“结果”中

为了解决这个问题,您可以扩展列表理解并完全删除 for 循环:

result = [line[slice(*slc) for slc in slices for line in sourcefile]
于 2012-07-25T15:26:07.560 回答