如何备份或恢复当前python文件的数据?

时间:2018-05-14 15:30:54

标签: python raspberry-pi file-handling

your_data = {'rose': 'red',
         'sun': 'orange',
         'sky': 'blue'}

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

这是一个示例程序。这里将字典复制到名为save.txt的文件中。实际上我在覆盆子pi中运行这个程序,如果电源突然下降,存储的数据将被完全删除。我希望我的程序从程序的上一端重新开始,或者我应该从我可以重新启动程序的位置进行备份。

1 个答案:

答案 0 :(得分:0)

如果您的程序突然终止,缓冲输出可能无法从您的程序进入操作系统。如果断电,缓冲输出可能无法从操作系统到磁盘。

第一个是在文件对象上使用flush处理,第二个是在io模块中由fsync处理。

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

当然,这有点慢。您还可以使用open('file.txt', 'w', buffering=0)来消除缓冲的IO并跳过刷新的需要(但您仍然需要fsync)。

(即使如此,仍然无法保证:当硬盘驱动器实际位于硬盘驱动器内的易失性存储器上时,已知硬盘驱动器报告写入已完成。)

中断后程序如何恢复是完全不同的事情。也许它可以读取输出文件以确定它停止的位置。 (恢复写入时,请记住使用追加'a'模式,以免截断输出文件。)

同时尝试sqlite3模块:基础SQLite数据库可以抵御电源故障。