65

我正在编写一个 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()。根据文档

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

不幸的是,我不明白那是什么意思。当我在我正在处理的文件中再次遇到相应的“项目”时,我只需要能够再次调用每个文件。我认为这是相当直截了当的,我只是很密集。万一这很重要,我有适用于 Python 2.7.1 和 3.2.3 的这个脚本的版本。我只需要一个或另一个工作;我创建这两个只是作为一个学习练习。

4

1 回答 1

72

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

意味着您可以像这样获取创建的临时文件的名称:

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 文档。

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

我在这里更详细地解释了如何创建临时文件名 在 Python 中生成随机文件名的最佳方法

于 2012-06-15T01:03:02.717 回答