创建目录和无限数量的子目录的函数

时间:2017-12-06 18:17:34

标签: python-3.x function recursion

我的目标是从对应于目录和子目录的列表中创建一个函数。

例如:'reports / English'对应于'reports'目录中的子目录'English'。

这是我的功能:

for i in lst:
  splitted = i.split('/')
  if not os.path.exists(destination_directory + '\\' + splitted[0]) : 
    os.mkdir(destination_directory + '\\' + splitted[0])
    os.mkdir(destination_directory + '\\' + splitted[0] + '\\' + splitted[1])
  else :
    os.mkdir(destination_directory + '\\' + splitted[0] + '\\' + splitted[1])

我不想使用os.chdir函数,因为害怕在文件夹中丢失自己。

我想做一个递归函数,我试过这个:

def my_sub_function(splitted):
"""
"""
if splitted == []:
    return None

else:
    if not os.path.exists(destination_directory + '\\' + splitted[0]) : 
        os.mkdir(destination_directory + '\\' + splitted[0])
        os.mkdir(destination_directory + '\\' + splitted[0] + '\\' + splitted[1])
    else :
        os.mkdir(destination_directory + '\\' + splitted[0] + '\\' + splitted[1])
        return t1(splitted[1:])

所以,请考虑以下列表:

lst_1 = 

['music',
 'reports/English',
 'reports/Spanish',
 'videos',
 'pictures/family',
 'pictures/party']

如果我这样做:

it will creates these directories :
.\\music
.\\reports\\English
.\\reports\\Spanish
.\\videos
.\\pictures\\family
.\\pictures\\party

但我只限于目录和一个sub_directory。 我希望我的函数能够处理3个或4个子目录,以便它可以创建这样的东西:

.\\pictures\\family\\Christmas\\meal\\funny

有没有人有想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

您不需要递归,只需要一个简单的目录遍历:

_setAsyncStorage = async () => {
    try { await AsyncStorage.setItem('@name', 'I like to save it');
  } catch (error) {
    // Error saving data
  }
}

当然,您可以使用os.makedirs()替代为您完成所有这些操作。无论哪种方式,您还应该检查您是否遇到过一个文件(因为简单import os def create_path(path): current_path = "." # start with the current path segments = os.path.split(path) # split the path into segments for segment in segments: candidate = os.path.join(current_path, segment) # get the candidate if not os.path.exists(candidate): # the path doesn't exist os.mkdir(candidate) # create it current_path = candidate # this is now our new path return current_path # return the final path 在所有情况下都不够)并且在用户没有创建目录的权限时进行错误处理。

另外,不要使用文字路径分隔符,因为这些分隔符在平台之间有所不同(尽管CPython通常足够聪明,可以处理平台差异)。