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