无法访问使用tempfile创建的临时文件
我正在使用tempfile.NamedTemporaryFile()
来存储一些文本,直到程序结束。在Unix上没有任何问题,但在Windows上,返回的文件无法读取或写入:python提供Errno 13.唯一的方法是设置delete=False
并手动删除文件os.remove()
。为什么?无法访问使用tempfile创建的临时文件
这会导致IOError,因为文件只能在创建后打开一次。
原因是因为NamedTemporaryFile
在Windows上创建了带有FILE_SHARE_DELETE
标志的文件。在Windows上,创建/打开特定共享标志文件后,所有后续打开的操作必须通过此共享标志。 Python的open
函数并不通过FILE_SHARE_DELETE
标志。有关更多详细信息和解决方法,请参阅我在How to create a temporary file that can be read by a subprocess?问题上的回答。
请看:http://docs.python.org/2/library/tempfile.html
tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])
该功能正是工作作为TemporaryFile()确实,除了文件是保证在文件系统中显示的名称(在Unix上,该目录项不在未链接)。该名称可以从文件对象的name属性中检索。名称是否可用于第二次打开文件,而指定的临时文件仍处于打开状态时,跨平台会有所不同(它可以在Unix上使用; 它不能在Windows NT或更高版本中使用)。如果删除为真(默认),则该文件在关闭后立即删除。
我刚刚尝试过使用TemporaryFile():同样的问题。问题一定是别的。 – Rnhmjoj 2013-03-23 16:45:30
你能告诉我们你使用它的代码吗?需要'delete = False'作为解决方法意味着它将被删除,因为您关闭了该文件。 – 2013-03-23 15:10:17
好的,我发现了这个问题。有时候文件需要被删除,为此我使用'open(tempfile.name,“w”)。close()'。这会导致IOError,因为该文件在创建后只能打开一次。现在,如何删除其内容而无需再次打开它? – Rnhmjoj 2013-03-23 17:14:51
我想你想*截断*文件;调用'.seek(0)'然后'.truncate()'。 – 2013-03-23 17:44:40