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

Tom*_*ime 14 python file temporary-files

我需要更新一个文件.我读了它,并写出来的变化.但是,我更愿意写入临时文件并将其重命名.

temp = tempfile.NamedTemporaryFile()
tempname = temp.name
temp.write(new_data)
temp.close()
os.rename(tempname, data_file_name)
Run Code Online (Sandbox Code Playgroud)

问题是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 +"一些随机数据".这样做的好处是会以一种留下有用线索的方式失败.

建议?

unu*_*tbu 23

您可以使用:

  • 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)
Run Code Online (Sandbox Code Playgroud)

  • 只是为了明确起见:您还必须将`delete = False`传递给NamedTemporaryFile构造函数,否则该文件将在关闭时被删除。 (2认同)

Raf*_*cki 5

您可以在“ dir”构造函数参数中传递文件位置。如您所愿,它可以工作。

>>> t = tempfile.NamedTemporaryFile(dir="/Users/rafal")
>>> t.name
'/Users/rafal/tmplo45Js'
Run Code Online (Sandbox Code Playgroud)

来源:http : //docs.python.org/library/tempfile.html#tempfile.NamedTemporaryFile

  • info:没有`delete = False`的情况下,一旦关闭文件处理程序,文件即被删除。 (2认同)