csv writer not closing file

后端 未结 5 1176
小蘑菇
小蘑菇 2020-12-05 23:36

im reading a csv file and then writing a new one:

import csv

with open(\'thefile.csv\', \'rb\') as f:
  data = list(csv.reader(f))

import collections
count         


        
相关标签:
5条回答
  • 2020-12-06 00:18

    Look at the difference:

    with open('thefile.csv', 'rb') as f:
        data = list(csv.reader(f))
    

    vs:

    writer = csv.writer(open('/pythonwork/thefile_subset1.csv', 'w'))
    
    0 讨论(0)
  • 2020-12-06 00:19
    with open('/pythonwork/thefile_subset1.csv', 'w') as outfile:
        writer = csv.writer(outfile)
        for row in data:
            if counter[row[11]] >= 500:
               writer.writerow(row)
    
    0 讨论(0)
  • 2020-12-06 00:23

    Force the writer to clean up:

    del writer
    
    0 讨论(0)
  • 2020-12-06 00:31

    close the file, not the csv writer. To do this, you'll need to open the file first before instantiating your writer rather than keeping it all in one line.

    import csv
    import collections
    
    with open('thefile.csv', 'rb') as f:
        data = list(csv.reader(f))
    
    counter = collections.defaultdict(int)
    for row in data:
        counter[row[11]] += 1
    
    f.close()  # good idea to close if you're done with it
    
    fSubset = open('/pythonwork/thefile_subset1.csv', 'w')
    writer = csv.writer(fSubset)
    for row in data:
        if counter[row[11]] >= 500:
            writer.writerow(row)
    
    fSubset.close()
    

    Also, I would suggest keeping your imports at the top of the script and closing the first file when you're done with it.

    0 讨论(0)
  • 2020-12-06 00:39

    You can break out the open command into its own variable, so that you can close it later.

    f = open('/pythonwork/thefile_subset1.csv', 'w')
    writer = csv.writer(f)
    f.close()
    

    csv.writer throws a ValueError if you try to write to a closed file.

    0 讨论(0)
提交回复
热议问题