【问题标题】:Iteratively assign/create multiple directories with as few lines as possible用尽可能少的行迭代地分配/创建多个目录
【发布时间】:2019-07-11 10:18:35
【问题描述】:

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

import os
import sys

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_bandspath_to_clipfiles 等是我稍后将在脚本中使用的文件夹。但是,我现在需要为分配给变量的每个目录编写一行代码。有没有办法将path_to_bandspath_to_clipfiles 等放入一个列表并在几行中循环遍历它?实际上,我有很多目录,我不希望它不必要地填满我的脚本。

【问题讨论】:

    标签: python loops operating-system


    【解决方案1】:

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

    【讨论】:

    • 好吧,这行得通。但是,我仍然看不到如何将目录迭代地分配给变量。例如。如果我想在脚本的其余部分导航到目录“bands”,有什么方法可以将它分配给变量 path_to_bands 而不必为每个目录都输入它?
    【解决方案2】:

    您应该在pathnamesmap 上稍微修改您的make_dir 版本

    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))
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 2020-10-22
      • 1970-01-01
      相关资源
      最近更新 更多