重命名python tempfile

时间:2012-05-11 08:18:54

标签: python

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

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

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

2 个答案:

答案 0 :(得分:21)

  

最好的方法是复制文件,让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()。 该文件将在关闭时自动刷新。

答案 1 :(得分:5)

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

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

import shutil
shutil.copy(f.name, 'new-name')