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()?
Ответы
Ответ 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
.