Я использую csv.DictReader, DictWriter.

У меня есть функция, которая читает файл и, кажется, закрывает его. В другой функции мне нужно добавить что-то еще, но я продолжаю получать: ValueError: операция ввода-вывода для закрытого файла.

Код выглядит так: На уровне модуля:

FILE = 'finished_emails.csv'

with open(FILE, 'r') as DONE:
    READER = DictReader(DONE)
    FINISHED = [e['email'] for e in READER]

Следующее на уровне модуля:

with open(FILE, 'a+') as DONE:
    FIELDS = ['email']
    WRITER = DictWriter(DONE, FIELDS)

Затем внутри функции:

    WRITER.writerow({'email': email})

Я просто пытаюсь отслеживать кучу отправленных писем, чтобы в случае сбоя скрипта я мог начать с того места, на котором остановился.

Любая помощь была бы замечательной! Благодарность!

0
Daniel Dow 2 Июн 2018 в 01:45

1 ответ

Лучший ответ

Оператор with закрывает файл, как только вы удаляете отступ в коде. Вы должны передать открытый файловый объект функции, которая записывает данные, и вызвать функцию внутри оператора with:

def example_func(writer, data):
    writer.writerow({'email': data[0]})

with open(FILE, 'a+') as DONE:
    FIELDS = ['email']
    WRITER = DictWriter(DONE, FIELDS)
    example_func(WRITER, FIELDS)
2
Markus Meskanen 1 Июн 2018 в 22:51