Подтвердить что ты не робот

Csv writer не закрывает файл

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 закрыть файл. Когда я открываю файл, он открывает его как ЧИТАТЬ ТОЛЬКО, потому что он говорит, что он все еще открыт.

как мне закрыть файл_файла_файла после его завершения?

4b9b3361

Ответ 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)

Ответ 2

Вы можете разбить команду open на свою собственную переменную, чтобы позднее ее можно было закрыть.

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

csv.writer выдает a ValueError, если вы пытаетесь записать в закрытый файл.

Ответ 3

закройте файл, а не 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 и закрыть первый файл, когда вы закончите с ним.

Ответ 4

Заставьте писателя очистить:

del writer

Ответ 5

Посмотрите на разницу:

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

против

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