Я читаю файл CSV и затем пишу новый:
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)
по некоторым причинам я не могу заставить csv.writer закрывать файл. когда я открываю файл, он открывает его как ТОЛЬКО ДЛЯ ЧТЕНИЯ, потому что он говорит, что это все еще открыто.
как я закрываю thefile_subset1.csv после того, как я буду сделан с ним?
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)
Вы можете вынести команду open в отдельную переменную, чтобы потом закрыть ее.
f = open('/pythonwork/thefile_subset1.csv', 'w')
writer = csv.writer(f)
f.close()
csv.writer
выбрасывает ValueError
при попытке записи в закрытый файл.
Посмотрите на разницу:
with open('thefile.csv', 'rb') as f:
data = list(csv.reader(f))
vs:
writer = csv.writer(open('/pythonwork/thefile_subset1.csv', 'w'))