Python os.rename()失败,正在被另一个进程使用
所以我试图重命名一个文件,它一直说“进程无法访问该文件,因为它正被另一个进程使用。”但我知道它没有被另一个进程使用,所以我不确定发生了什么。这是我的密码Python os.rename()失败,正在被另一个进程使用,python,file,Python,File,所以我试图重命名一个文件,它一直说“进程无法访问该文件,因为它正被另一个进程使用。”但我知道它没有被另一个进程使用,所以我不确定发生了什么。这是我的密码 while self.fileSet.hasMoreFiles(): file = self.fileSet.nextFile() periodIndex=file.find(".") extension = file[periodIndex:] baseName=file[:periodIndex] s
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
之前,先打开文件两行,但在尝试重命名之前,您没有关闭它,因此您自己的程序仍将其打开
在os.rename()
之前调用self.newFile.close()
,您应该避免这个错误——或者更好的是,在重命名之前,不要调用open()
,因为您实际上并没有使用打开的文件(并且在重命名之后立即打开它)
一些切题的注释:
- 您不应该命名变量
——如果您这样做,已经有一个名为文件
的类型正在隐藏文件
- 您复制了很多代码—例如,您刚刚在重命名上方的行上创建了
,但随后您重新计算了它。为什么不将self.backupName
作为第二个参数传递给self.backupName
os.rename()
- 您可以使用跳过
调用和后续切片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()
“但我知道它没有被另一个过程使用”-你怎么知道的?你查过了吗?这回答了我的问题,还有一些。哈,重复/不太好的代码是我昨晚试图完成的结果。但是谢谢你的帮助,这对我来说是一件愚蠢的事情。我在函数开始时尝试在golang中使用
延迟myFile.Close()
重命名。然而,在运行defer
之前,我试图在该函数中重命名。这个答案帮助了我。在调用os.Rename()
之前,我执行了myFile.Close()
。尽管在Linux上测试时一切运行正常,但在Windows中无法重命名。谢谢你的主意。