ValueError : 对已关闭文件的 I/O 操作

新手上路,请多包涵
import csv

with open('v.csv', 'w') as csvfile:
    cwriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)

for w, c in p.items():
    cwriter.writerow(w + c)

这里, p 是字典, wc 都是字符串。

当我尝试写入文件时,它会报告错误:

 ValueError: I/O operation on closed file.

原文由 GobSmack 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 737
2 个回答

正确缩进;您的 for 语句应该在 with 块内:

 import csv

with open('v.csv', 'w') as csvfile:
    cwriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)

    for w, c in p.items():
        cwriter.writerow(w + c)

with 块之外,文件被关闭。

 >>> with open('/tmp/1', 'w') as f:
...     print(f.closed)
...
False
>>> print(f.closed)
True

原文由 falsetru 发布,翻译遵循 CC BY-SA 4.0 许可协议

混合 使用可能会引发 相同的错误:制表符 + 空格。

 with open('/foo', 'w') as f:
 (spaces OR  tab) print f       <-- success
 (spaces AND tab) print f       <-- fail

原文由 Slake 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题