Python 为什么删除临时文件时出现Windows错误? 我已经创建了一个临时文件 向创建的文件中添加了一些数据 保存它,然后尝试删除它

Python 为什么删除临时文件时出现Windows错误? 我已经创建了一个临时文件 向创建的文件中添加了一些数据 保存它,然后尝试删除它,python,temporary-files,Python,Temporary Files,但是我得到了WindowsError。我在编辑文件后关闭了它。如何检查哪个进程正在访问该文件 C:\Documents and Settings\Administrator>python Python 2.6.1 (r261:67517, Dec 4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more informati

但是我得到了
WindowsError
。我在编辑文件后关闭了它。如何检查哪个进程正在访问该文件

C:\Documents and Settings\Administrator>python
Python 2.6.1 (r261:67517, Dec  4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tempfile
>>> __, filename = tempfile.mkstemp()
>>> print filename
c:\docume~1\admini~1\locals~1\temp\tmpm5clkb
>>> fptr = open(filename, "wb")
>>> fptr.write("Hello World!")
>>> fptr.close()
>>> import os
>>> os.remove(filename)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
WindowsError: [Error 32] The process cannot access the file because it is being used by
       another process: 'c:\\docume~1\\admini~1\\locals~1\\temp\\tmpm5clkb'
C:\Documents and Settings\Administrator>python
win32上的Python 2.6.1(r261:67517,2008年12月4日,16:51:00)[MSC v.1500 32位(英特尔)]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>导入临时文件
>>>文件名=tempfile.mkstemp()
>>>打印文件名
c:\docume~1\admini~1\locals~1\temp\tmpm5clkb
>>>fptr=打开(文件名,“wb”)
>>>fptr.write(“你好,世界!”)
>>>fptr.close()
>>>导入操作系统
>>>删除(文件名)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
WindowsError:[错误32]进程无法访问该文件,因为该文件正由用户使用
另一个进程:“c:\\docume~1\\admini~1\\locals~1\\temp\\tmpm5clkb”

我认为您需要释放fptr才能干净地关闭文件。尝试将fptr设置为无。

文件仍处于打开状态。这样做:

fh, filename = tempfile.mkstemp()
...
os.close(fh)
os.remove(filename)
从:

mkstemp()返回一个元组,该元组包含一个打开文件的操作系统级句柄(由OS.open()返回)和该文件的绝对路径名,顺序如下。版本2.3中的新功能

因此,
mkstemp
返回操作系统文件句柄和临时文件的文件名。重新打开临时文件时,原始返回的文件句柄仍处于打开状态(没有人阻止您在程序中打开两次或更多相同的文件)

如果要将该OS文件句柄作为python文件对象进行操作,可以:

>>> __, filename = tempfile.mkstemp()
>>> fptr= os.fdopen(__)

然后继续你的常规代码。

8个问题,其中几个问题的答案显然是正确的,还有0个被接受的答案——你希望人们回答你多久?哎呀。。我没有意识到有接受按钮。我会接受我认为正确的答案。。谢谢:)@Vijayendra Bapte,操作系统模块中有文件描述符操作,您可以使用它。哦。谢谢你的解释。