繁体   English   中英

使用Python通过文件路径获取目录的文件层次结构

[英]Get the file hierarchy of a directory by the file path with Python

这是我的问题。 我使用os.walk来获取特定目录下的所有文件路径,并将该路径存储在这样的文件中

/indexes/attachment/CCTBAU/CCTBAU-13/87009
/indexes/attachment/CCTBAU/CCTBAU-19/91961
/indexes/attachment/CCTBAU/CCTBAU-19/thumbs/_thumb_91961.png
/indexes/attachment/CCTBAU/CCTBAU-11/86413
/indexes/attachment/CCTBAU/CCTBAU-11/thumbs/_thumb_86412.png
/indexes/attachment/CCTBAU/CCTBAU-11/thumbs/_thumb_86413.png
/indexes/attachment/CCTBAU/CCTBAU-12/86614
/indexes/attachment/CCTBAU/CCTBAU-16/90240
/indexes/attachment/CCTBAU/CCTBAU-17/90241
/indexes/attachment/ACD/ACD-200/91345
/indexes/attachment/ACD/ACD-200/96305
/indexes/attachment/ACD/ACD-200/99169
/indexes/attachment/ACD/ACD-201/91344
/indexes/attachment/ACD/ACD-202/91346
/indexes/attachment/ACD/ACD-197/88916
/indexes/attachment/ACD/ACD-189/73799
/indexes/attachment/ACD/ACD-38/60709
/indexes/attachment/ACD/ACD-198/88918

现在,我想通过读取文件中的所有路径来获取文件层次结构,这意味着我读取了文件并获取了所有路径,然后我就知道文件层次结构是

index
  |--attachment
         |-----ACD
         |      |---ACD-200
         |      |---...
         |
         |-----CCTBAU
                |----CCTBAU-13
                |----...

谁可以提供帮助? 提前致谢!

我使用os.listdir,代码如下:

  1 import os
  2
  3 def PrintDir(dir, depth, prefix = '    '):
  4     contents = os.listdir(dir)
  5     paths = filter(lambda x : os.path.isdir(os.path.join(dir, x)), contents)
  6     files = [x for x in contents if x not in paths]
  7     if not paths and not files:
  8         return
  9
 10     print depth * prefix + '|----' + os.path.basename(dir) \
               if depth != 0 else os.path.basename(dir)
 11     for subdir in paths:
 12         PrintDir(os.path.join(dir, subdir), depth+1, prefix)
 13     for filename in files:
 14         print depth * prefix + '|----' + filename
 15
 16 PrintDir('~/testdir', 0)

您还可以使用os.walk来获取所需的内容,因为os.walk的返回值是一个元组:根,目录,文件。

测试用例是:

testdir / a / aa / aaa testdir / b / bb / bbb testdir / b / bb.txt

和aaa,bbb,bb.txt是文件。

输出为:

testdir
    |----a
        |----aa
            |----aaa
    |----b
        |----bb
            |----bbb
        |----bb.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM