0

这是我的问题。我使用 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
                |----...

谁能帮助解决这个问题?提前致谢!

4

1 回答 1

0

我使用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 的返回值是一个元组:root、dirs、files。

测试用例是:

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
于 2013-11-14T02:56:16.437 回答