Я провожу 30-дневный курс Python на Udemy. В День 16, часть 2, я застрял с созданием функции edit_data (в моем коде: edytuj_dane). Я хотел бы сохранить некоторые значения во временном файле (объект NamedTemporaryFile) с помощью DictWriter, а затем переместить содержимое в файл CSV (dane.csv), который должен обновляться каждой командой функции.
Я запутался, так как есть ошибка, что я не могу получить доступ к временному файлу, созданному объектом NamedTemporaryFile, тогда как при проверке пути кажется, что он вообще недоступен (также проверял, скрыт ли он). Не могли бы вы проверить и сообщить мне, если у вас есть какие-либо идеи, как исправить ошибку?
Содержимое файла dane.csv выглядит следующим образом:
идентификатор, имя, электронная почта, сумма, отправлено, дата
1,2,3,4,5,6
И исполняемый код ниже:
def edycja_danych(edit_id = None, email = None, sent = None, amount = None):
nazwa_pliku = 'data.csv'
plik_tymczasowy = NamedTemporaryFile(delete=True, mode ='w')
with open(nazwa_pliku, 'r') as csvfile, plik_tymczasowy:
reader = csv.DictReader(csvfile)
tytuly = ['id','name','email', 'amount', 'sent', 'date']
writer = csv.DictWriter(plik_tymczasowy, fieldnames = tytuly)
writer.writeheader()
for row in reader:
writer.writerow(row)
shutil.copyfile(plik_tymczasowy.name, nazwa_pliku)
edycja_danych(email='[email protected]', amount = 90, sent = '')
На самом деле выполнение кода заканчивается следующей ошибкой:
PermissionError: [Errno 13] Отказано в доступе: 'C:\Users\Marek\AppData\Local\Temp\tmpjr622sbn'
Принимая во внимание, что это должно (по крайней мере, я так думаю) закончиться без ошибок и с обновлением файла.
io.StringIO
, чтобы создать поддельный файл для передачи в csv. - person Jean-François Fabre   schedule 02.04.2019NamedTemporaryFile
, по крайней мере, при условии, что вы используетеos.rename
вместоshutil.copyfile
для создания целевого файла атомарно. - person chepner   schedule 02.04.2019shutil.move
предпочтительнее в общем случае - person Jean-François Fabre   schedule 02.04.2019