我需要更新一个文件。我读入并修改后写出。但是,我更愿意写入临时文件并将其重命名到位。
temp = tempfile.NamedTemporaryFile()
tempname = temp.name
temp.write(new_data)
temp.close()
os.rename(tempname, data_file_name)
问题是 tempfile.NamedTemporaryFile()
在 /tmp
中创建临时文件,这是一个不同的文件系统。这意味着 os.rename()
失败了。如果我改用 shlib.move()
那么我就没有 mv
提供的原子更新(对于同一文件系统中的文件,yadda,yadda 等。 )
我知道 tempfile.NamedTemporaryFile()
有一个 dir
参数,但是 data_file_name
可能是 "foo.txt"
在这种情况下 dir='.'
;或者 data_file_name
可能是 "/path/to/the/data/foo.txt"
在这种情况下 dir="/path/to/the/data"
。
我真正想要的是 data_file_name + "some random data"
的临时文件。这样做的好处是失败后会留下有用的线索。
建议?
最佳答案
您可以使用:
prefix
使临时文件以与 原始文件。dir
指定放置临时文件的位置。os.path.split
从文件名中拆分目录。
import tempfile
import os
dirname, basename = os.path.split(filename)
temp = tempfile.NamedTemporaryFile(prefix=basename, dir=dirname)
print(temp.name)
关于python - 在 python 中,在与另一个文件相同的目录中创建一个临时文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8745387/