首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python临时文件:如何多次打开临时文件?

python临时文件:如何多次打开临时文件?
EN

Stack Overflow用户
提问于 2013-07-06 19:57:04
回答 2查看 7.2K关注 0票数 5

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

代码语言:javascript
复制
tmp = ...
stream1 = # get a stream for the temp file
stream2 = # get another stream for the temp file

我尝试了几个函数(TemporaryFile、NamedTemporaryFile、SpooledTemporaryFile),并使用fileno方法,但我无法执行我想要的操作。

你知道我是不是应该创建自己的类?

谢谢

>更新

我在尝试打开文件时出现错误...

代码语言:javascript
复制
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'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-06 20:05:07

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

您可以选择:

  • 可多次重新打开文件,为同一文件创建多个文件对象。
  • 可在每次读取之前倒带文件对象。

要重新打开该文件,请使用NamedTemporaryFile并使用常规open()调用多次重新打开相同的文件名。您可能希望将delete=False传递给构造函数,特别是在Windows上,以便能够做到这一点。

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

票数 8
EN

Stack Overflow用户

发布于 2013-07-06 20:09:42

您可以使用tempfile.mkstemp()。从文档中:

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17502704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档