Velvet Star Monitor

Standout celebrity highlights with iconic style.

news

csv writer not closing file

Writer Emily Wong

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
counter = collections.defaultdict(int)
for row in data: counter[row[11]] += 1
writer = csv.writer(open('/pythonwork/thefile_subset1.csv', 'w'))
for row in data: if counter[row[11]] >= 500: writer.writerow(row)

for some reason i cannot get the csv.writer to close the file. when i open the file it opens it as READ ONLY because it says that is still open.

how do i close thefile_subset1.csv after i am done with it?

5 Answers

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)

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.

2

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.

2

Force the writer to clean up:

del writer
7

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'))
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy