Pyhton-迭代分配/创建尽可能少的行的多个目录

时间:2019-07-11 10:18:35

标签: python loops operating-system

我有一个脚本,该脚本使用其主目录中的某些目录。第一步是使用os.path.join()将变量名分配给这些目录。但是,如果目录不存在,则需要创建它。我事先不知道哪个目录存在和不存在。我想出的解决方案是:

homepath = os.path.abspath(os.path.dirname(sys.argv[0]))
def make_dir(var_name,dir_name):
    var_name = os.path.join(homepath,dir_name)
    if os.path.exists(var_name) == False:
        os.mkdir(var_name)
    return var_name

pathnames = ['bands','clipfiles','ndvi','ndmi','masked','clipped','upsampled','stats_csv']      

path_to_bands = make_dir(path_to_bands, pathnames[0])
path_to_clipfiles = make_dir(path_to_clipfiles, pathnames[1])
path_to_ndvi = make_dir(path_to_ndvi, pathnames[2])

path_to_bands,path_to_clipfiles等是我稍后将在脚本中使用的文件夹。但是,现在我需要为分配给变量的每个目录使用一行代码。有什么方法可以将path_to_bands,path_to_clipfiles等制作成列表并在几行中循环遍历?实际上,我有很多目录,并且我不希望它不必要地填充我的脚本。

谢谢!

2 个答案:

答案 0 :(得分:1)

os.makedirs()非常适合您的用例。通过传递参数exist_ok=True,您将不必检查目录是否预先存在。它还会递归创建目录,因此您只需要指定底层目录即可。

答案 1 :(得分:0)

您应该在 mapmake_dir 稍微修改一下您的 pathnames

import os

homepath = os.path.abspath(os.path.dirname(sys.argv[0]))

def make_dir(dir_name):
    var_name = os.path.join(homepath,dir_name)
    if not os.path.exists(var_name): os.mkdir(var_name)
    return var_name

pathnames =[
    'bands',
    'clipfiles',
    'ndvi',
    'ndmi',
    'masked',
    'clipped',
    'upsampled',
    'stats_csv']      

varnames = list(map(makedir, pathnames))