如何使用Python持久存储临时文件?
时间:2020-03-06 14:22:15 来源:igfitidea点击:
我正在尝试使用" tempfile"模块来处理和创建文本文件。文件准备好后,我想将其保存到磁盘。我认为这就像使用" shutil.copy"一样简单。但是,我收到"权限被拒绝" IOError:
>>> import tempfile, shutil >>> f = tempfile.TemporaryFile(mode ='w+t') >>> f.write('foo') >>> shutil.copy(f.name, 'bar.txt') Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> shutil.copy(f.name, 'bar.txt') File "C:\Python25\lib\shutil.py", line 80, in copy copyfile(src, dst) File "C:\Python25\lib\shutil.py", line 46, in copyfile fsrc = open(src, 'rb') IOError: [Errno 13] Permission denied: 'c:\docume~1\me\locals~1\temp\tmpvqq3go' >>>
使用" tempfile"库时不打算这样做吗?有一个更好的方法吗? (也许我忽略了一些琐碎的事情)
解决方案
在示例中,我们始终可以使用shutil.copyfileobj:
new_file = open('bar.txt', 'rw') shutil.copyfileobj(f, new_file)
我们使用TemporaryFile
或者NamedTemporaryFile
创建的文件在关闭时会自动删除,这就是为什么会出现错误。如果我们不希望这样做,可以改用mkstemp
(请参见tempfile文档)。
>>> import tempfile, shutil, os >>> fd, path = tempfile.mkstemp() >>> os.write(fd, 'foo') >>> os.close(fd) >>> shutil.copy(path, 'bar.txt') >>> os.remove(path)
从python 2.6开始,我们还可以将NamedTemporaryFile使用,并将delete选项设置为False。这样,即使关闭临时文件,也可以访问它。
请注意,在Windows(NT和更高版本)上,即使文件仍处于打开状态,也无法再次访问该文件。我们必须先关闭它,然后才能复制它。在Unix系统上不是这样。