2016-09-17 4 views
1

Ich bin neu zu Stackoverflow. Ich habe viel Hilfe von diesem Forum beim Schreiben des folgenden Codes genommen. Der folgende Code durchsucht alle Verzeichnisse/Unterverzeichnisse auf den Systemlaufwerken, aber während Sie in Laufwerk "D" schauen, sieht es nur die Verzeichnisse und Unterverzeichnisse nach dem Ordner, in dem ich dieses Programm ausführen.Python os.walk() Methode

Ich meine, wenn ich dieses Programm von D:\Dir1\Dir2\Dir3\myCode.py ausführen, wird es Verzeichnisse und Unterverzeichnisse nach D:\Dir1\Dir2\Dir3\ nicht das gesamte Laufwerk "D" durchsuchen. Es funktioniert gut mit anderen Laufwerken, wenn es am selben Ort läuft. Das ist mein Code:

import os, string 
total=0 
for driveLetter in string.ascii_uppercase: 
    try: 
     if os.path.exists(driveLetter+':'): 
      for root, dirs, docs in os.walk(top=driveLetter+':', topdown=True):    
       for name in docs: 
        try: 
         if (name.endswith(".docx")) or (name.endswith(".doc")): 
          print(os.path.join(root, name)) 
          total+=1       
        except: 
         continue 
    except: 
     continue 
print ('You have a total of ' + str(total) + ' word documents in your System') 
+0

Was ist, wenn Sie ein ‚\‘ nach dem Add ‚d:‘ so erhalten Sie ‚D: \‘ ich eine Theorie haben, dass ohne, dass sie die cwd des d-Laufwerk ist Referenzierung, die ist, wo das Programm war gestartet von. Nicht ein Windows-Typ, also könnte ich komplett aus der Basis sein (und meine Schrägstriche könnten falsch sein). – nephlm

Antwort

2

In Windows each process may set a current working directory on each drive separately. D: bedeutet das aktuelle Arbeitsverzeichnis auf Laufwerk D. Hier tritt das Verhalten auf, weil auf allen anderen Laufwerken das aktuelle Arbeitsverzeichnis auf das Stammverzeichnis festgelegt ist, aber D: ist es D:\Dir1\Dir2\Dir3\, weil das Arbeitsverzeichnis an den Speicherort geändert wurde das Skript. Um eindeutig auf das Verzeichnis root von D: zu verweisen, müssen Sie D:\ verwenden. So

drive_root = drive_letter + ':\\' # double \\ because this is a Python string literal 
if os.path.exists(drive_root): 
    for root, dirs, docs in os.walk(drive_root, topdown=True):    
+0

Dank Anti Haapla, es hat funktioniert. Dankbar. – Timi

Verwandte Themen