ValueError : 닫힌 파일에 대한 I / O 작업


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)

여기에 p사전이 w있고 c둘 다 문자열입니다.

파일에 쓰려고하면 오류가보고됩니다.

ValueError: I/O operation on closed file.

답변:


157

올바르게 들여 쓰기; 당신의 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

6

탭 + 공백 을 혼합 하면 동일한 오류가 발생할 수 있습니다 .

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

1
사실이지만 파이썬에서는 항상 혼합 할 때 그렇습니다.
Nebulosar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.