Writelines()不写

时间:2013-01-24 23:14:28

标签: python python-2.7

运行此代码会按预期创建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 个答案:

答案 0 :(得分:2)

()后需要close

fo.close()

在使用文件时,请考虑使用with语句。

答案 1 :(得分: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)

推理:

  • 文件没有无理由加载到内存中
  • islice可用于为每个其他行创建生成器
  • ...然后可以传递给输出.writelines()
  • with语句(上下文管理器)随后会自动关闭文件
  • 这是(恕我直言)更容易阅读和理解意图是什么

答案 2 :(得分:1)

正如评论所说,您忘记关闭文件,因此缓冲区永远不会被刷新。

替换

fo.close

fo.close()

答案 3 :(得分:0)

'close'是一种方法 - 是。用for.close()代替for.close