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まだ1つのリストしかありません。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

「sourcefileのfor行」ブロック内で反復するたびに、「結果」リストが上書きされます。そのため、「結果」に格納されるのは最終行のみになります。

これを解決するには、リスト内包表記を拡張して、forループを完全に削除します。

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