在操作前检查文件是否已打开
我写了一个脚本,用来根据特定条件给文件夹里的文件重命名。
if len(self.toLoc.get()) == 0:
searchRev = "_R" + newRev
for filename in os.listdir(App.pdfDir):
try:
filePath, fileExtension = os.path.splitext(filename)
sep = searchesri
rest = filename.split(sep, 1)[0] + searchRev + fromLocation + fileExtension
if fileExtension == '.pdf':
shutil.move(os.path.join(App.pdfDir, filename), os.path.join(App.pdfDir, rest))
elif fileExtension == '.xlsx':
shutil.move(os.path.join(App.pdfDir, filename), os.path.join(App.pdfDir, rest))
except IOError:
print ("Errror")
我想用“try”和“except”来检查文件是否打开,然后再进行重命名。目前,如果文件是打开的,程序会显示“错误”信息,并且重命名文件,但会在目录里保留一个原文件的副本。我希望能在开始重命名之前,检查一下有没有文件是打开的?谢谢大家的建议。
1 个回答
1
编辑: 可能是重复的问题
你可以先尝试用 open
来打开文件,如果文件正在被使用,这个操作会抛出一个 IOException
错误。
if len(self.toLoc.get()) == 0:
searchRev = "_R" + newRev
for filename in os.listdir(App.pdfDir):
FilePath, fileExtension = os.path.splitext(filename)
try:
with open(os.path.join(App.pdfDir, filename),"r+") as f:
pass
except IOError:
print ("Errror")
sep = searchesri
rest = filename.split(sep, 1)[0] + searchRev + fromLocation + fileExtension
if fileExtension == '.pdf':
shutil.move(os.path.join(App.pdfDir, filename), os.path.join(App.pdfDir, rest))
elif fileExtension == '.xlsx':
shutil.move(os.path.join(App.pdfDir, filename), os.path.join(App.pdfDir, rest))
至于在检查之后和处理过程中确保文件没有被打开,shutil.move
是原子操作(基本上在使用时会锁定访问),当在同一个文件系统上时。