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

你需要一个()之后close

fo.close()

还可以考虑with在处理文件时使用该语句。

于 2013-01-24T23:17:19.693 回答
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语句(上下文管理器)之后会自动关闭文件
  • (恕我直言)更容易阅读和理解意图是什么
于 2013-01-24T23:17:42.687 回答
1

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

代替

fo.close

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

“关闭”是一种方法——即。使用 fo.close() 代替 fo.close

于 2013-01-24T23:17:30.973 回答