pythoncsvfile-ioio

ValueError : I/O operation on closed file


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)

Here, p is a dictionary, w and c both are strings.

When I try to write to the file it reports the error:

ValueError: I/O operation on closed file.

Solution

  • Indent correctly; your for statement should be inside the with block:

    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)
    

    Outside the with block, the file is closed.

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