在做任何事情之前检查文件是否打开

时间:2014-04-24 15:34:32

标签: python

我已经创建了一个脚本,可以根据特定条件重命名文件夹中的文件。

    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,除了在进行任何重命名之前查看文件是否已打开。截至目前,如果文件已打开,程序将发出“错误”消息并重命名该文件,但会在目录中保留原始文件的副本。我希望有一种方法可以在开始重命名过程之前检查是否有任何文件是打开的?谢谢你的建议。

1 个答案:

答案 0 :(得分:1)

编辑: Possible duplicate

您可以先尝试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