我正在尝试使用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'发布于 2013-07-06 20:05:07
如果不将文件位置重新定位回起始位置,则无法多次读取文件对象(无论是临时对象还是其他对象)。
您可以选择:
要重新打开该文件,请使用NamedTemporaryFile并使用常规open()调用多次重新打开相同的文件名。您可能希望将delete=False传递给构造函数,特别是在Windows上,以便能够做到这一点。
要倒带,请在文件对象上调用.seek(0)。
发布于 2013-07-06 20:09:42
您可以使用tempfile.mkstemp()。从文档中:
以最安全的方式创建临时文件。假设平台正确地实现了os.open()的os.O_EXCL标志,那么在文件的创建过程中不存在竞争条件。只有创建用户ID才能读写文件。如果平台使用权限位来指示文件是否可执行,则任何人都不能执行该文件。子进程不继承文件描述符。
与TemporaryFile()不同,mkstemp()的用户负责在删除临时文件后将其删除。
然后,您可以使用open()内置函数创建并多次打开该文件。完成后记得删除该文件,因为这不是自动完成的。
https://stackoverflow.com/questions/17502704
复制相似问题