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

CSVWriter не сохраняет данные в файл - ПОЧЕМУ?

Новичок Python немного разочарован модулем csv. С такой скоростью было бы проще, если бы я сам написал анализатор файлов, но я хочу делать вещи по-питоновски....

Я написал небольшой python script, который должен сохранить мои данные в CSV файле.

Вот фрагмент моего кода:

import csv

wrtr = csv.writer(open('myfile.csv','wb'),delimiter=',', quotechar='"')

for row in rows:
    wrtr.writerow([row.field1,row.field2,row.field3])

Файл myfile.csv создан успешно, но он пуст, но имеет блокировку на нем, поскольку он все еще используется процессом Python. Похоже, что данные были записаны в файл в памяти, но он еще не был сброшен на диск.

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

  • Как получить python для очистки на диске
  • Как закрыть файл, открытый в методе csv.writer()?
4b9b3361

Ответ 1

Использование

with open('myfile.csv','wb') as myfile:
    wrtr = csv.writer(myfile, delimiter=',', quotechar='"')
    for row in rows:
        wrtr.writerow([row.field1,row.field2,row.field3])
        myfile.flush() # whenever you want

или

myfile = open('myfile.csv','wb')
wrtr = csv.writer(myfile, delimiter=',', quotechar='"')
for row in rows:
    wrtr.writerow([row.field1,row.field2,row.field3])
    myfile.flush() # whenever you want, and/or
myfile.close() # when you're done.

Самое приятное в первом подходе заключается в том, что ваш файл также будет автоматически закрыт в случае исключения.

Если вы хотите, чтобы ваш файловый объект был анонимным, он будет закрыт только после выхода программы. Когда или если он сброшен, зависит от ОС - так может быть и до выхода.

Ответ 2

Методы flush() и close() объекта . Или используйте with.