7

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

pdf = render_me_some_pdf() #PDF RENDER
f = tempfile.NamedTemporaryFile()
f.write(pdf)
f.flush()

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

4

2 回答 2

37

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

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

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

这用于os.link创建到临时文件的硬链接,该硬链接将在临时文件被自动删除后持续存在。

这段代码有几个优点:

  • 我们将tempfile对象用作上下文管理器,因此我们无需担心显式关闭它。
  • 由于我们正在创建文件的硬链接,而不是复制它,因此我们无需担心由于复制大文件而导致的磁盘空间或时间消耗。
  • 由于我们没有复制数据,我们不需要调用f.flush(). 该文件将在关闭时自动刷新。
于 2016-04-22T04:09:21.037 回答
8

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

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

import shutil
shutil.copy(f.name, 'new-name')
于 2012-05-11T08:21:37.173 回答