重命名python tempfile

nel*_*ela 6 python

重命名以下临时文件的方法是什么

pdf = render_me_some_pdf() #PDF RENDER
f = tempfile.NamedTemporaryFile()
f.write(pdf)
f.flush()
Run Code Online (Sandbox Code Playgroud)

我读了一些关于os.rename的事情,但我现在还不知道如何应用它

lar*_*sks 24

最好的方法是复制文件,让python在关闭时删除临时文件:

我实际上认为你最好使用os.link:

with tempfile.NamedTemporaryFile(dir=os.path.dirname(actual_name)) as f:
  f.write(pdf)
  os.link(f.name, actual_name)
Run Code Online (Sandbox Code Playgroud)

这用于os.link创建临时文件的硬链接,该链接将在自动删除临时文件后保留.

此代码有几个优点:

  • 我们将tempfile对象用作上下文管理器,因此我们不必担心明确地关闭它.
  • 由于我们正在创建文件的硬链接,而不是复制它,因此我们无需担心因复制大文件而导致的磁盘空间或时间消耗.
  • 由于我们没有复制数据,因此我们无需致电f.flush().文件将在关闭时自动刷新.

  • 限制:这不能用于覆盖现有文件,并且会失败并显示 EEXIST (3认同)
  • @spatar,这是通过指定“dir”参数并将文件放在您希望最终文件所在的同一目录中来处理的。这样就不会尝试跨文件系统链接。 (2认同)

Thi*_*ter 7

您可以通过访问文件名f.name.但是,除非你使用delete=Falsepython将(尝试)一旦关闭临时文件自动删除.即使你没有保存,禁用自动删除也会保留tempfile - 所以这不是一个好主意.

最好的方法是复制文件,让python在关闭时删除临时文件:

import shutil
shutil.copy(f.name, 'new-name')
Run Code Online (Sandbox Code Playgroud)

  • 该解决方案还失去了重命名的原子性。请参阅/sf/ask/1461160641/ (3认同)