2016-09-29 4 views
1

Ich habe eine Ordnerstruktur ähnlich wie unten beschrieben.Traversing Ordner, mehrere Unterordner für die Dateien in Python

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 

Ich möchte für jeden SubDir1 und SubDir2 die erste FileA und erste FileB zur Liste der Lage sein

Ich habe Online geschaut und os.walk in einer for-Schleife ähnlich gesehen:

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 

Aber das scheint nur zu funktionieren, wenn es eine Datei direkt in einem Unterverzeichnis gibt. Mein Problem ist, dass manchmal ein zusätzliches Unterverzeichnis innerhalb des Unterverzeichnisses vorhanden ist (!!)

Hat jemand irgendwelche Ideen, wie man das löst?

+0

Sie sagten 'Ich habe online geschaut und gesehen os.walk in einer for-Schleife, ähnlich wie '. Also meinen Sie, dass der Code, den Sie in die Frage eingeben, nicht der Code ist, den Sie ausgeführt haben? –

+0

Nein, ich habe diesen Code benutzt und mit anderem Code gebastelt, der auch nicht funktioniert hat –

Antwort

0

Ihr Problem ist eigentlich diese beiden Linien, sie entfernen und Sie sould in Ordnung sein:

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

Erklärung:

Was sie tun ist machen sie das erste Unterverzeichnis in jedem Verzeichnis verschwinden, bevor os.walk hatte Zeit, es zu gehen. So ist es nicht verwunderlich, dass Sie in Unterverzeichnissen seltsames Verhalten bekommen.

Hier ist eine Darstellung dieses Verhaltens den folgenden Baum mit:

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

Ohne die problematischen Zeilen:

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 

Mit die problematischen Zeilen:

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

So sehen wir deutlich, dass die beiden Unterordner test10 und test22, die zuerst in der Reihe waren, wegen der "schlechten Zeilen" komplett ignoriert wurden.

Verwandte Themen