如何使用tempfile.NamedTemporaryFile()?

时间:2012-06-15 01:00:35

标签: python temporary-files

我正在开发一个Python脚本,需要创建大约50个不同的临时文件,这些文件在脚本过程中经常被附加并在最后合并。我确信tempfile模块可以满足我的需求,但我无法弄清楚如何阅读文档。

我想使用临时文件 - 而不是变量 - 来节省系统内存,因为这些数据块会随着脚本处理数万个其他文件而变大。

以下代码块是我目前用于在非临时目录中创建这些文件(非暂时)的hack:

item = (string from another file)   # string must id file for future use
tmpfile = 'tmpfiles/' + item
if item not in totalitems:
   totalitems.add(item)
   with open(tmpfile, 'w') as itemfile:
      output = some stuff
      tmpfile.write(output)
else:
   with open(tmpfile, 'a') as itemfile:
      output = different stuff
      tmpfile.write(output)

我认为我需要的是tempfile.NamedTemporaryFile()。根据{{​​3}}:

  

可以从文件对象的名称成员中检索该名称。

不幸的是,我不明白这意味着什么。当我在我正在处理的文件中再次运行其相应的“项目”时,我只需要能够稍后再次调用每个文件。我认为这是相当直接的,我只是在密集。如果它很重要,我有Python 2.7.1和3.2.3的这个脚本的版本。我真的只需要一个人或另一个人去工作;我创建了两个作为学习练习。

1 个答案:

答案 0 :(得分:40)

  

"可以从文件对象的名称成员中检索该名称。"

表示您可以获取如下所示的临时文件的名称:

In [4]: import tempfile

In [5]: tf = tempfile.NamedTemporaryFile()  
In [6]: tf.name  # retrieve the name of the temp file just created
Out[6]: 'c:\\blabla\\locals~1\\temp\\tmptecp3i'

注意:默认情况下,该文件在关闭时将被删除。但是,如果delete参数为False,则不会自动删除该文件。有关详细信息,请参阅此处的Python docs

由于您可以检索要创建的50个临时文件中的每个文件的名称,因此可以在稍后再次使用它们之前将其保存在列表中(如您所说)。请务必相应地设置delete值,以便文件在关闭时不会消失(如果您打算关闭,以后再重新打开它们)。

我在此解释了如何更详细地创建临时文件名Best way to generate random file names in Python