Python 通过 dict 进行目录搜索和组织

Chu*_*uck 0 python directory path os.walk subdirectory

大家好,这是我最近第一次尝试进入Python的文件和操作系统部分。我正在尝试搜索一个目录然后找到所有子目录。如果该目录没有文件夹,则将所有文件添加到列表中。并通过听写来组织它们。

例如,一棵树可能看起来像这样

  • 起始路径
    • 目录 1
      • 子目录1
      • 子目录2
      • 子目录 3
        • 子子目录
          • 文件.jpg
          • 文件夹1
            • 文件1.jpg
            • 文件2.jpg
          • 文件夹2
            • 文件3.jpg
            • 文件4.jpg

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

如果您对此有任何帮助或组织信息的更好想法,我们将不胜感激。谢谢。

Ale*_*lli 5

也许你想要这样的东西:

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': []}.

如果这不完全是您想要的,也许您可​​以具体向我们展示其中的差异是什么?我怀疑如果需要的话,它们可能很容易修复。