gpt4 book ai didi

python - 如何使文件创建成为原子操作?

转载 作者:IT老高 更新时间:2023-10-28 20:31:22 24 4
gpt4 key购买 nike

我正在使用 Python 在单个操作中将文本 block 写入文件:

open(file, 'w').write(text)

如果脚本被中断导致文件写入未完成,我希望没有文件而不是部分完成的文件。这个可以吗?

最佳答案

将数据写入临时文件,当数据成功写入后,将文件重命名为正确的目标文件,例如

with open(tmpFile, 'w') as f:
f.write(text)
# make sure that all data is on disk
# see http://stackoverflow.com/questions/7433057/is-rename-without-fsync-safe
f.flush()
os.fsync(f.fileno())
os.replace(tmpFile, myFile) # os.rename pre-3.3, but os.rename won't work on Windows

根据文档 http://docs.python.org/library/os.html#os.replace

Rename the file or directory src to dst. If dst is a non-empty directory, OSError will be raised. If dst exists and is a file, it will be replaced silently if the user has permission. The operation may fail if src and dst are on different filesystems. If successful, the renaming will be an atomic operation (this is a POSIX requirement).

注意:

  • 如果 src 和 dest 位置不在同一个文件系统上,则可能不是原子操作

  • os.fsync 如果在电源故障、系统崩溃等情况下性能/响应能力比数据完整性更重要,则可以跳过这一步

关于python - 如何使文件创建成为原子操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2333872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com