我如何在python中读取NamedTemporaryFile。

时间:2013-09-19 19:15:56

标签: python

我是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'

3 个答案:

答案 0 :(得分:10)

我使用的方法是使用file = tempfile.NamedTemporaryFile(..., delete=False),在写完文件后关闭生成的文件,并在完成后手动调用os.remove(file.name)。 (您可以使用a custom context manager__exit__方法删除文件,以便更好地与with一起使用。)

答案 1 :(得分:1)

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

来自文档:“名称是否可用于第二次打开文件,而命名的临时文件仍然打开,因平台而异(它可以在Unix上使用;它不能在Windows NT或更高版本上使用)“。

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

答案 2 :(得分:-1)

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

安装shelljob pip包。来自docs的示例用法:

with fs.NamedTempFile() as nm:
    proc.call( "curl http://mortoray.com/ -o {}".format( nm ) )
    html = open(nm).read()
    print( len(html) )