8

我是python2.6编程的新手,我的目标是在os的temp目录中创建.txt或.xls“临时文件”并向其中写入一些数据。然后在读取完成后从“临时文件”中读取数据数据,从临时目录中删除“临时文件”。

对于该过程,我选择 NamedTemporaryFile(),但无法实现。你能建议我如何实现它。在此先感谢。

>>> import os
>>> import tempfile
>>> with tempfile.NamedTemporaryFile() as temp:
            print temp.name
            temp.write('Some data')            
            f = open(os.path.join(tempfile.gettempdir(),temp.name))
            lines = f.readlines()
            f.close()
            temp.flush()


c:\users\110\appdata\local\temp\tmpf8p3kc

Traceback (most recent call last):
  File "<pyshell#3>", line 4, in <module>
    f = open(os.path.join(tempfile.gettempdir(),temp.name))
IOError: [Errno 13] Permission denied: 'c:\\users\\110\\appdata\\local\\temp\\tmpf8p3kc'
4

3 回答 3

12

我使用的方法是使用file = tempfile.NamedTemporaryFile(..., delete=False), 在完成写入后关闭生成的文件,并在完成后手动调用os.remove(file.name)。(您可以使用自定义上下文管理器__exit__的方法进行文件删除,以使其更好地与 .) 一起使用。)with

于 2014-02-03T09:50:11.717 回答
2

我曾经遇到过这个问题。。

来自文档:“在命名的临时文件仍然打开的情况下,是否可以使用该名称再次打开文件,这因平台而异(它可以在 Unix 上如此使用;它不能在 Windows NT 或更高版本上使用)。”

为什么不尝试在temp对象仍处于打开状态时使用该对象从文件中读取呢?如果它以w+b模式打开,那么您应该能够 seek() 和 read()

于 2013-09-19T19:34:02.950 回答
-1

我创建了一个替代机制,它创建一个命名的临时文件但不保持打开状态。因此,它在任何地方都完全可用。它不是在关闭时删除,而是在with块的末尾删除。

安装shelljob pip 包。文档中的示例用法:

with fs.NamedTempFile() as nm:
    proc.call( "curl http://mortoray.com/ -o {}".format( nm ) )
    html = open(nm).read()
    print( len(html) )
于 2014-02-03T09:41:27.577 回答