我有一个脚本,该脚本使用其主目录中的某些目录。第一步是使用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等制作成列表并在几行中循环遍历?实际上,我有很多目录,并且我不希望它不必要地填充我的脚本。
谢谢!
答案 0 :(得分:1)
os.makedirs()
非常适合您的用例。通过传递参数exist_ok=True
,您将不必检查目录是否预先存在。它还会递归创建目录,因此您只需要指定底层目录即可。
答案 1 :(得分:0)
您应该在 map
上make_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))