Chu*_*uck 0 python directory path os.walk subdirectory
大家好,这是我最近第一次尝试进入Python的文件和操作系统部分。我正在尝试搜索一个目录然后找到所有子目录。如果该目录没有文件夹,则将所有文件添加到列表中。并通过听写来组织它们。
例如,一棵树可能看起来像这样
即使 subsubdir 中有文件,也应该跳过它,因为它有文件夹。
现在,如果我知道要查找多少个目录,则通常可以使用 os.listdir 和 os.path.isdir 来执行此操作。但是,如果我希望它是动态的,则必须补偿任意数量的文件夹和子文件夹。我尝试过使用 os.walk,它会轻松找到所有文件。我遇到的唯一麻烦是使用包含文件的路径名创建所有字典。我需要按 dict 组织的文件夹名称,直到起始路径。
所以最后,使用上面的示例,字典及其中的文件应该如下所示:
dict['dir1']['subdir3']['subsubdir']['folder1'] = ['file1.jpg', 'file2.jpg']
dict['dir1']['subdir3']['subsubdir']['folder2'] = ['file3.jpg', 'file4.jpg']
Run Code Online (Sandbox Code Playgroud)
如果您对此有任何帮助或组织信息的更好想法,我们将不胜感激。谢谢。
也许你想要这样的东西:
def explore(starting_path):
alld = {'': {}}
for dirpath, dirnames, filenames in os.walk(starting_path):
d = alld
dirpath = dirpath[len(starting_path):]
for subd in dirpath.split(os.sep):
based = d
d = d[subd]
if dirnames:
for dn in dirnames:
d[dn] = {}
else:
based[subd] = filenames
return alld['']
Run Code Online (Sandbox Code Playgroud)
例如,给定/tmp/a这样一个:
$ ls -FR /tmp/a
b/ c/ d/
/tmp/a/b:
z/
/tmp/a/b/z:
/tmp/a/c:
za zu
/tmp/a/d:
Run Code Online (Sandbox Code Playgroud)
print explore('/tmp/a')发出:{'c': ['za', 'zu'], 'b': {'z': []}, 'd': []}.
如果这不完全是您想要的,也许您可以具体向我们展示其中的差异是什么?我怀疑如果需要的话,它们可能很容易修复。