gpt4 book ai didi

python - os.link() 与 os.rename() 与 os.replace() 用于编写原子写入文件。最好的方法是什么?

转载 作者:行者123 更新时间:2023-12-04 13:38:24 27 4
gpt4 key购买 nike

嗨,我正在尝试编写像这样的原子写入函数......

with tempfile.NamedTemporaryFile(mode= "w", dir= target_directory) as f: 
#perform file writing operation
os.replace(f.name, target_file_name)

我正在努力弄清楚在第 3 行中执行的最佳操作是什么。我应该使用 os.replace()、os.rename() 还是应该使用 os.link() 在临时文件和目标文件之间创建硬链接(hard link)?

os.link() 是否使用更多内存?每个的好处是什么,它们都是原子的?

最佳答案

os.rename/os.replaceboth implemented 使用 this function
唯一的区别是 os.replace 使用 is_replace=1 ,它对 posix 没有影响,但在 Windows 上设置 MOVEFILE_REPLACE_EXISTING 标志:

If a file named lpNewFileName exists, the function replaces its contents with the contents of the lpExistingFileName file, provided that security requirements regarding access control lists (ACLs) are met. For more information, see the Remarks section of this topic.

If lpNewFileName or lpExistingFileName name a directory and lpExistingFileName exists, an error is reported.

os.link 并不适合这个函数,除非你能保证目标文件不存在(因为 os.link 会出错):
$ touch a b
$ link a b
link: cannot create link 'b' to 'a': File exists
$ python3 -c 'import os; os.link("a", "b")'
Traceback (most recent call last):
File "<string>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'a' -> 'b'

关于python - os.link() 与 os.rename() 与 os.replace() 用于编写原子写入文件。最好的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60369291/

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