Ich habe die folgende VerzeichnisstrukturWie kann ich vermeiden, bekommen doppelte Pfade von os.walk
/mnt/type/split/v2/doc/RESOURCE_ID/YYYY/FY/DOCUMENT_ID
zum Beispiel könnte ein Weg
/mnt/type/split/v2/doc/100045/2008/FY/28
wo
RESOURCE_ID = 100045
YYYY = 2008
DOCUMENT_ID = 28
Hinweis sein DOCUMENT_ID ist das letzte Verzeichnis im Pfad - Dateien im Verzeichnis DOCUMENT_ID
ich versuche Inventar dieser Struktur zu nehmen mit dem folgenden Code
def survey():
magic_paths = []
for (resource_id, dirname,filename) in os.walk('/mnt/type/split/v2/doc'):
if resource_id:
for (magic_path, dirname2,filename2) in os.walk(resource_id):
if len(magic_path.split(os.sep)) == 10:
magic_paths.append(magic_path + os.linesep)
write_survey(magic_paths)
x = len(magic_paths)
return x
Ich erhalte fünf Kopien jeden Pfad in meiner magic_paths Liste. Ich habe 1.500.000 Pfade, also bekomme ich 7.500,00 Einträge in meiner Liste.
Die ersten 1.500.000 sind die einzigartigen Werte. Die nächsten 6.000.000 von Gruppen bestehen, die auf dem RESOURCE_ID verwurzelt sind, 4-mal wiederholt
/mnt/type/split/v2/doc/100045/2008/FY/28 #obs_1
/mnt/type/split/v2/doc/100045/2008/FY/29 #obs_2
/mnt/type/split/v2/doc/100045/2008/FY/30 #obs_3
/mnt/type/split/v2/doc/100045/2008/FY/31 #obs_4
/mnt/type/split/v2/doc/1028/2008/FY/28 #obs_5 # see the new RESOURCE_ID
.
. 1,499,995 more unique values
.
/mnt/type/split/v2/doc/100045/2008/FY/28 #begin of first repetition
/mnt/type/split/v2/doc/100045/2008/FY/29
/mnt/type/split/v2/doc/100045/2008/FY/30
/mnt/type/split/v2/doc/100045/2008/FY/31
/mnt/type/split/v2/doc/100045/2008/FY/28 #begin of second repetition
/mnt/type/split/v2/doc/100045/2008/FY/29
/mnt/type/split/v2/doc/100045/2008/FY/30
/mnt/type/split/v2/doc/100045/2008/FY/31
/mnt/type/split/v2/doc/100045/2008/FY/28 #begin of third repetition
/mnt/type/split/v2/doc/100045/2008/FY/29
/mnt/type/split/v2/doc/100045/2008/FY/30
/mnt/type/split/v2/doc/100045/2008/FY/31
/mnt/type/split/v2/doc/100045/2008/FY/28 #begin of fourth repetition
/mnt/type/split/v2/doc/100045/2008/FY/29
/mnt/type/split/v2/doc/100045/2008/FY/30
/mnt/type/split/v2/doc/100045/2008/FY/31
/mnt/type/split/v2/doc/1028/2008/FY/28 #series of 4 repetitions based on RESOURCE ID 1028
Es gibt verschiedene Dateien in den Verzeichnissen und U-Booten auf jeder Ebene, ich brauche nur zu inventarisieren der Pfade zu dem DOCUMENT_IDs.
Ich verstehe nicht, warum die Ergebnisse so strukturiert sind wie sie sind. Ich glaubte, dass ich bei RESOURCE_ID anfing und nur die Verzeichnisse fand, die 9 tief waren, seit das Teilen auf os.sep mir eine Liste mit zehn Einzelteilen gibt.
'/mnt/type/split/v2/doc/100045/2008/FY/31'.split(os.sep) = ['','mnt',type','split','v2','doc','100045','2008','FY','31']
Als Antwort auf die Fragen in den Kommentaren
- Ich glaube, dass ich jedes RESOURCE_ID Verzeichnis wurde immer und es dann zu Fuß. Dass die anderen Elemente aus dem ersten os.walk zurück (dirnames und Dateinamen) ignoriert werden würde
- ich nicht glaubte, os.listdir funktionieren würde, kann ich diese Arbeit mit glob machen, aber mach mir Sorgen um es zu essen mein Gedächtnis
Warum sind Sie jedes Verzeichnis zu Fuß zweimal * *? Sie rufen 'walk()' erneut auf. –
Verstehen Sie einen Unterschied zwischen "os.listdir" und "os.walk"? Der Zweite rekuriert für dich.Nested 'Walk()' Anrufe sieht sehr verdächtig aus. –
Geben Sie auch den tatsächlichen Code ein; Der von Ihnen gepostete Code ist nicht gültig Python; Der Pfad ist keine Zeichenfolge in Anführungszeichen. Bei Fehlern wie diesem ist es schwierig herauszufinden, welche anderen Fehler Sie in Ihren Post eingefügt haben, die nicht in Ihrem echten Code enthalten sind. Ich gehe davon aus, dass "os.walk()" und "walk()" dieselbe Funktion haben, aber nicht sicher sein können. –