所以我试图重命名一个文件,它一直说“该进程无法访问该文件,因为它正被另一个进程使用。”但我知道它没有被另一个进程使用,所以我不确定发生了什么。这是我的代码
while self.fileSet.hasMoreFiles():
file = self.fileSet.nextFile()
periodIndex=file.find(".")
extension = file[periodIndex:]
baseName=file[:periodIndex]
self.newFile=open(file, 'w+')
self.backupName = baseName + "_bak" + extension
os.rename(file, baseName + "_bak" + extension)
self.newFile=open(file, 'w+')
self.writeNew()
最佳答案
您在尝试调用 os.rename
之前打开文件 2 行,但在尝试重命名之前没有关闭它,因此您自己的程序仍然打开它。
在 os.rename()
之前调用 self.newFile.close()
并且您应该避免该错误 - 或者更好的是,不要调用 open()
在重命名之前完全没有,因为您实际上并没有使用打开的文件(并且您在重命名之后立即打开它)。
一些切线注释:
您不应该将变量命名为
file
- 如果您这样做,您正在隐藏一个名为file
的类型。您重复了很多代码 - 例如,您刚刚在重命名上方的行中创建了
self.backupName
,但随后您重新计算了它。为什么不将self.backupName
作为第二个参数传递给os.rename()
?您可以使用
os.path.splitext()
跳过find
调用和后续切片.
总而言之,您可以将代码压缩为:
while self.fileSet.hasMoreFiles():
curFile = self.fileSet.nextFile()
baseName, extension = os.path.splitext(curFile)
self.backupName = baseName + "_bak" + extension
os.rename(curFile, self.backupName)
self.newFile = open(curFile, 'w+')
self.writeNew()
关于python - os.rename() 失败,正在被另一个进程使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21493278/