ValueError: Hoạt động I / O trên tệp đã đóng


109
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)

Đây, plà một từ điển, wccả hai đều là chuỗi.

Khi tôi cố gắng ghi vào tệp, nó báo lỗi:

ValueError: I/O operation on closed file.

Câu trả lời:


157

Thụt lề một cách chính xác; forcâu lệnh của bạn phải nằm trong withkhối:

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)

Bên ngoài withkhối, tệp đã được đóng.

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

6

Lỗi tương tự có thể phát sinh bằng cách trộn : tab + dấu cách.

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

1
Đúng, nhưng điều này luôn xảy ra với python khi trộn chúng với nhau phải không?
Nebulosar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.