CSVWriter не сохраняет данные в файл в тот момент, когда я его пишу - PullRequest
33 голосов
/ 20 октября 2010

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

Я написал небольшой скрипт на Python, который должен сохранять мои данные в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 блокирует файл, я предполагаю, что я несу ответственность заснятие блокировкиВот мои вопросы:

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

Ответы [ 2 ]

56 голосов
/ 20 октября 2010

Используйте

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.

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

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

6 голосов
/ 20 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...