python tempfile:如何打开几次临时文件?

时间:2013-07-06 11:57:04

标签: python temporary-files

我正在尝试使用tempfile模块。 (http://docs.python.org/2.7/library/tempfile.html) 我正在寻找一个临时文件,我可以打开几次以获得几个流来读取它。

tmp = ...
stream1 = # get a stream for the temp file
stream2 = # get another stream for the temp file

我已经尝试过几个函数(TemporaryFile,NamedTemporaryFile,SpooledTemporaryFile)并使用fileno方法,但我无法执行我想要的任务。

我是否应该自己上课?

由于

>更新

尝试使用其名称打开文件时出错...

In [2]: t = tempfile.NamedTemporaryFile()
In [3]: t.write('abcdef'*1000000)
In [4]: t.name
Out[4]: 'c:\\users\\mike\\appdata\\local\\temp\\tmpczggbt'
In [5]: f = open(t.name)
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
<ipython-input-6-03b9332531d2> in <module>()
----> 1 f = open(t.name)

IOError: [Errno 13] Permission denied: 'c:\\users\\mike\\appdata\\local\\temp\\tmpczggbt'

2 个答案:

答案 0 :(得分:8)

如果不将文件位置重新定位到开头,则无法多次读取文件对象(无论是临时的还是其他文件)。

您的选择是:

  • 要多次重新打开文件,请为同一文件创建多个文件对象。
  • 在每次阅读前回放文件对象。

要重新打开该文件,请使用NamedTemporaryFile并使用常规open()调用重新打开相同的文件名几次。您可能希望将delete=False传递给构造函数,尤其是在Windows上,以便能够执行此操作。

要快退,请在文件对象上调用.seek(0)

答案 1 :(得分:0)

您可以使用tempfile.mkstemp()。来自文档:

  

以最安全的方式创建临时文件。假设平台正确实现os.open()的os.O_EXCL标志,文件创建中没有竞争条件。该文件只能由创建用户ID读写。如果平台使用权限位来指示文件是否可执行,则该文件可由任何人执行。子进程不会继承文件描述符。

     

与TemporaryFile()不同,mkstemp()的用户负责在完成后删除临时文件。

然后,您可以使用open()内置函数多次创建和打开该文件。请记住在完成后删除文件,因为这不是自动完成的。