Как сделать резервную копию или восстановить данные текущего файла Python? - PullRequest
0 голосов
/ 14 мая 2018
your_data = {'rose': 'red',
         'sun': 'orange',
         'sky': 'blue'}

with open('save.txt','w') as f:
while True:
    print(your_data, file=f)

Это пример программы. здесь словари копируются в файл с именем save.txt. На самом деле я запускаю эту программу в Raspberry Pi, и если питание внезапно отключается, данные, сохраненные полностью, стираются. Я хочу, чтобы моя программа запускалась снова с предыдущего конца программы, или у меня должна быть резервная копия, откуда я могу перезапустить свою программу.

1 Ответ

0 голосов
/ 14 мая 2018

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

Первый обрабатывается с помощью flush для файлового объекта, а второй с помощью fsync в модуле io.

f.flush()
os.fsync(f.fileno())

Это немного медленно, конечно. Вы также можете использовать open('file.txt', 'w', buffering=0) для устранения буферизованного ввода-вывода и пропустить необходимость очистки (но вам все равно потребуется fsync).

(Несмотря на это, все еще нет никаких гарантий: известно, что жесткие диски сообщают о завершении записи, когда она фактически находится в энергозависимом хранилище на жестком диске.)

Как ваша программа восстанавливается после прерывания, это совсем другой вопрос. Возможно, он может прочитать выходной файл, чтобы определить, где он остановился. (При возобновлении записи не забывайте использовать режим добавления 'a', чтобы не обрезать выходной файл.)

Также попробуйте модуль sqlite3 : базовая база данных SQLite устойчива к сбоям питания.

...