Python在关闭文件后无法删除文件,“正在被另一个进程使用”

14

我正在尝试在读取文件后删除它,但出现了"WindowsError: [Error 32] The process cannot access the file because it is being used by another process"的错误。

file = open(self.filePath)
for line in file:
        #do things
file.close()

os.remove(self.filePath) #throws error

os.rename(self.filePath, self.filePath + "old") #throws same error

有什么想法吗?谢谢!

更新: 我刚刚重启了我的(Windows 7)电脑,启动了Eclipse,将os.remove("c:\file\file.txt")移动到我的脚本的第一行,运行并得到相同的错误。

更新2: 我使用Windows资源管理器导航到文件。第一次我无法删除它,因为它正在被“系统”使用。第二次尝试删除成功了。文件不再存在。现在当我运行     os.remove("c:\ file \ file.txt") WindowsError:[错误32]进程无法访问文件,因为另一个进程正在使用它:“ c:\ file \ file.txt” 然后我查看Windows资源管理器,文件是空的。我可以在资源管理器中删除它,但当我运行脚本删除时,它会抛出错误(并创建空文件)。这里发生了什么?

更新3: 我是个笨蛋。 我在对象初始化中打开了文件 当我测试将“remove”移到脚本顶部时,我应该将它放在顶部,而不是在创建对象之后

对不起浪费您的时间,我整个周末都在做要到明天交的东西,当它不能运行时我有些慌了。


2
下载Process Explorer或类似工具,尝试查看实际上打开了该文件的内容。 - Anon.
如果您在打开文件之前尝试删除它,这样做可以吗? - Mark Byers
filePath是一个目录吗? - wallyk
filePath 是一个文本文件。我已经成功地向它写入了内容,只是无法删除它。 - alby
1
硬编码文件路径在任何时候都不是一个好主意。更糟糕的是,在 Windows 上需要格外小心,因为反斜杠被过度使用(作为路径分隔符和转义字符)。os.remove("c:\file\file.txt") 应该改为 os.remove(r"c:\file\file.txt")os.remove("c:\\file\\file.txt")os.remove("c:/file/file.txt") - John Machin
4个回答

10

另一个可能性是,在您尝试删除或重命名文件时,病毒检查器仍然保持该文件处于打开状态。这种情况并不经常发生,但当它发生时,跟踪问题会非常恼人。


2
我也看到过病毒检查器经常搞砸这样的代码。我的建议是捕获WindowsError,如果失败是因为文件正在使用中,则暂停一段时间后再尝试。 - user79758

6

2

我现在遇到了一个关于access-AB的问题。Process Explorer显示..'python.exe'正在使用我想要删除的文件。我无法结束Python进程。这是一个很烦人的解决方案。


0

这可能有很多原因。但最有可能的原因是您打开了一个包含该文件的目录窗口,或者最近关闭了这样一个窗口,而Windows尚未从其缓存中清除该目录。尝试关闭您正在查看的任何目录窗口,然后再试一次。


嗨,请看一下我的问题更新。我刚刚重新启动了Windows,打开了Eclipse,将os.remove行移到脚本顶部,运行并得到相同的错误。在这个Windows会话中根本没有打开资源管理器。 - alby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接