遍历文件夹,python

时间:2016-09-29 22:41:10

标签: python glob directory subdirectory os.walk

我的文件夹结构类似于下面列出的内容。

Path
|
|
+----SubDir1
|       |
|       +---SubDir1A
|       |       |
|       |       |----- FileA.0001.ext
|       |       |----- ...
|       |       |----- ...
|       |       |----- FileA.1001.ext
|       |       |----- FileB.0001.ext
|       |       |----- ...
|       |       |----- ...
|       |       |----- FileB.1001.ext
|       +---SubDir1B
        |
|       |       |----- FileA.0001.ext
|       |       |----- ...
|       |       |----- ...
|       |       |----- FileA.1001.ext
|       |       |----- FileB.0001.ext
|       |       |----- ...
|       |       |----- ...
|       |       |----- FileB.1001.ext
+----SubDir2
|       |
|       |----- FileA.0001.ext
|       |----- ...
|       |----- ...
|       |----- FileA.1001.ext
|       |----- FileB.0001.ext
|       |----- ...
|       |----- ...
|       |----- FileB.1001.ext

我希望能够为每个SubDir1和SubDir2列出第一个FileA和第一个FileB

我已经在网上看到并在for循环中看到了os.walk,类似于:

import os

rootDir = '.'
for dirName, subdirList, fileList in os.walk(rootDir):
    print('Found directory: %s' % dirName)
    for fname in fileList:
        print('\t%s' % fname)
    # Remove the first entry in the list of sub-directories
    # if there are any sub-directories present
    if len(subdirList) > 0:
        del subdirList[0

但是,只有在子目录中直接存在文件时,这似乎才有效。我的问题是,有时在子目录(!!)

中有一个额外的子目录

有没有人有任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

你的问题实际上是那两行,删除它们你就可以了:

if len(subdirList) > 0:
    del subdirList[0]

解释

他们所做的是他们使每个目录中的第一个子目录在os.walk有时间走之前消失。因此,对于子目录,你会得到奇怪的行为就不足为奇了。

以下是使用以下树的行为说明:

test0/
├── test10
│   ├── test20
│   │   └── testA
│   ├── test21
│   │   └── testA
│   └── testA
├── test11
│   ├── test22
│   │   └── testA
│   ├── test23
│   │   └── testA
│   └── testA
└── testA

没有有问题的行:

Found directory: ./test/test0
    testA
Found directory: ./test/test0/test10
    testA
Found directory: ./test/test0/test10/test21
    testA
Found directory: ./test/test0/test10/test20
    testA
Found directory: ./test/test0/test11
    testA
Found directory: ./test/test0/test11/test22
    testA
Found directory: ./test/test0/test11/test23
    testA

有问题的行:

Found directory: ./test/test0
    testA
Found directory: ./test/test0/test11
    testA
Found directory: ./test/test0/test11/test23
    testA

因此,我们清楚地看到排在第一位的两个子文件夹test10test22完全被忽略了,因为"坏线"。