python - 在 python 中,在与另一个文件相同的目录中创建一个临时文件?

标签 python file temporary-files

我需要更新一个文件。我读入并修改后写出。但是,我更愿意写入临时文件并将其重命名到位。

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/

相关文章:

python - 卡夫卡消费者 : How to start consuming from the last message in Python

bash - 不是空文件,但 "wc -l"输出 0

arrays - 使用CodeIgniter 2.0上传多个文件(数组)

c - 删除名称上带有空格的文件

python - 将两个脚本合并为一个代码,用于 csv 文件数据验证

python - 朱皮特 : Line magic function not found

python - 如何使用 Python NLTK 仅打印出 Wo​​rdNet 同义词集中的单词本身?

java - 删除 IntelliJ 的系统目录是否安全?

java - 如何正确地单元测试 "abstracted"文件处理?

Ruby 临时文件#tap : What class defines this method and what is it for?