Python - 如果文件夹已存在,如何处理文件夹创建

时间:2017-01-31 14:19:06

标签: python

def copy_excel():

    srcpath = "C:\\Aloha"           #where the excel files are located
    srcfiles = os.listdir(srcpath)  #sets srcfiles as list of file names in the source path folder
    destpath = "C:\\"               #destination where the folders will be created
    destdir = list(set([filename[19:22] for filename in srcfiles])) #extract three digits from filename to use for folder creation (i.e 505, 508, 517,...)

    #function to handle folder creation
    def create(dirname, destpath):
            full_path = os.path.join(destpath, dirname)
            if os.path.exists(full_path):
                    pass
            else:
                    os.mkdir(full_path)
            return full_path

    #function to handle moving files to appropriate folders
    def move(filename, dirpath):
            shutil.move(os.path.join(srcpath, filename), dirpath)

    #creates the folders with three digits as folder name by calling the create function above
    targets = [(folder, create(folder, destpath)) for folder in destdir]
    #handles moving files to appropriate folders if the three digits in file name matches the created folder
    for dirname, full_path in targets:
            for filename in srcfiles:
                    if dirname == filename[19:22]:
                            move(filename, full_path)
                    else:
                            pass

我对Python有些新意,所以请耐心等待!我能够在这个网站上找到这个代码块,并根据我的具体用例进行了调整。该代码适用于创建指定的文件夹并将文件放入相应的文件夹。但是,当我再次为放入"C:\\Aloha"的新文件运行代码时,我得到Error 183: Cannot create a file when that file already exists.在这种情况下,该文件夹已经存在,因为它是在第一次运行脚本时先前创建的

当目标尝试创建已存在的文件夹时,代码出错。我的问题是,处理已存在的文件夹的逻辑是什么,忽略错误只是将文件移动到相应的文件夹?该脚本只应创建文件夹(如果它们不存在)。

任何帮助将不胜感激!我尝试过try / except和嵌套if / else语句以及os.path.isdir(path)来检查目录是否存在,但我没有运气。我为任何错误的评论道歉,我在构建这个脚本时仍在学习Python逻辑。

3 个答案:

答案 0 :(得分:6)

您可以使用os.mkdirs,不仅可以创建级联目录,例如C:\foo\bar\qux将创建foobar和{{ 1}}如果它们不存在,但您也可以设置qux ,以便在目录存在时不会引发错误。

所以:

exist_ok=True

答案 1 :(得分:2)

如果您想要抛出错误或在目录存在时停止处理,您可以在os.path.exists(full_path)之前使用mkdir

答案 2 :(得分:0)

我刚遇到的另一个选择......

try:
    os.mkdir(path)
except (FileExistsError):
    pass
except Exception as e:
    raise e