【发布时间】:2012-06-18 02:13:25
【问题描述】:
我正在编写一个 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()。根据documentation:
可以从文件对象的 name 成员中检索该名称。
很遗憾,我不明白这意味着什么。当我在我正在处理的文件中再次遇到相应的“项目”时,我只需要能够再次调用每个文件。我认为这是相当直截了当的,我只是很密集。万一这很重要,我有适用于 Python 2.7.1 和 3.2.3 的这个脚本的版本。我只需要一个或另一个工作;我创建这两个只是作为一个学习练习。
【问题讨论】:
-
@Joe,这个问题的一部分似乎与您链接的线程重复。部分不是;请参阅下面 Levon 答案下的评论。
-
为什么需要命名这些文件?如果它们未命名(预先删除),则在清理方面出错的可能性较小。您可以简单地存储 tmpfile 对象,而不是其名称,然后调用
seek(0)转到开头以准备读取...或映射其内容,或者以其他方式访问它。 -
@CharlesDuffy,你可能是对的,但我不明白。这是场景:在我正在处理的数据文件中重复出现 50 个“项目”(实际上是短字符串)。我创建了一个临时文件来从数据文件中收集有关这 50 项中的每一项的信息。我的问题是,当我在临时文件关闭后再次遇到该项目时,如何找到与特定“项目”相关的临时文件。
-
@pyrogerg "在它的临时文件被关闭之后"?为什么要关闭文件?