我的目标是从对应于目录和子目录的列表中创建一个函数。
例如:'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
有没有人有想法?
谢谢!
答案 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通常足够聪明,可以处理平台差异)。