我已经创建了一个脚本,可以根据特定条件重命名文件夹中的文件。
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,除了在进行任何重命名之前查看文件是否已打开。截至目前,如果文件已打开,程序将发出“错误”消息并重命名该文件,但会在目录中保留原始文件的副本。我希望有一种方法可以在开始重命名过程之前检查是否有任何文件是打开的?谢谢你的建议。
答案 0 :(得分: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
是原子的(基本上在使用时锁定访问权限)when on the same filesystem。