0

このコードを実行すると、予想どおり file2.txt が作成されますが、ファイルは空です。(注: file1.txt には詩の行が含まれているだけです。) なぜこのようなことが起こるのでしょうか? 配列a2をテキストファイルに書き込むにはどうすればよいですか?

import copy

#Open input file, read it into an array, and remove the every other line.
f = open('file1.txt','r')
a1 = f.readlines()
a2 = copy.deepcopy(a1)
f.close
for n in range(len(a1)):
    if n%2 == 0:
        a2.remove(a1[n])

# Open output file and write array into it.
fo = open('file2.txt','w')
fo.writelines(a2)
fo.close
4

4 に答える 4

2

あなたはこれが次のように書かれた方が良いことに気づきます:

from itertools import islice
with open('input') as fin, open('output','w') as fout:
    every_other = islice(fin, None, None, 2)
    fout.writelines(every_other)

理由:

  • 理由もなくファイルがメモリにロードされない
  • islice1行おきにジェネレーターを作成するために使用できます
  • ...これを出力に渡すことができます.writelines()
  • ステートメント(コンテキストマネージャー)はwith、後でファイルを自動的に閉じます
  • (IMHO)意図が何であるかを読み、理解する方が簡単です
于 2013-01-24T23:17:42.687 に答える
2

()afterが必要ですclose:

fo.close()

withまた、ファイルを操作するときにステートメントを使用することも検討してください。

于 2013-01-24T23:17:19.693 に答える
1

コメントが言ったように、ファイルを閉じるのを忘れているため、バッファがフラッシュされることはありません。

交換

fo.close

fo.close()
于 2013-01-24T23:17:37.603 に答える
0

「close」はメソッドです-つまり。fo.close の代わりに fo.close() を使用します

于 2013-01-24T23:17:30.973 に答える