import csv
with open('v.csv', 'w') as csvfile:
cwriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)
for w, c in p.iteritems():
cwriter.writerow(w + c)
此处p
是字典,w
和c
都是字符串。
当我尝试在文件中写入时,它报告错误:
ValueError : I/O operation on closed file.
帮助我,我是python的新手。我正在使用Python 2.7.3 先感谢您。
答案 0 :(得分:110)
正确缩进; 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.iteritems():
cwriter.writerow(w + c)
在with
块之外,文件已关闭。
>>> with open('/tmp/1', 'w') as f:
... print f.closed
...
False
>>> print f.closed
True
答案 1 :(得分:2)
同样的错误可以通过混合:标签+空格来提升。
with open('/foo', 'w') as f:
(spaces OR tab) print f <-- success
(spaces AND tab) print f <-- fail
答案 2 :(得分:0)
在PyCharm中进行调试时,由于没有断点,我遇到了这个异常。为了防止这种情况,我在with
块之后添加了一个断点,然后它停止了发生。
答案 3 :(得分:0)
file = open("filename.txt", newline='')
for row in self.data:
print(row)
将数据保存到变量(file
)中,因此您需要一个with
。
答案 4 :(得分:0)
当我在 with open(...) as f:
中使用未定义的变量时遇到了这个问题。
我删除了(或者我在外面定义了)未定义的变量,问题就消失了。