2016-07-19 15 views
0

Ich arbeite gerade an Code, der mehrere Verzeichnisse aus einer INI-Datei durchsucht und dann in ein neues Verzeichnis kopiert und kopiert. Ich stieß auf ein Problem, bei dem die for-Schleife, die die Dateien druckt, nur einmal ausgeführt wird, wenn sie fünfmal ausgeführt werden soll. Wie kann ich es reparieren, so dass die for-Schleife jedes Mal funktioniert, wenn sie aufgerufen wird?Python for loop wird nur einmal ausgeführt

Code:

def copyFiles(path): 
    rootPath = path 
    print(rootPath) 
    pattern = "*.wav" 
    search = "" 

    #searches the directories for the specified file type then prints the name 
    for root, dirs, files in os.walk(rootPath): 
     for filename in fnmatch.filter(files, pattern): 
      print(filename) 

def main(): 
    #opens the file containing all the directories 
    in_file = open('wheretolook.ini', "r") 

    #create the new directory all the files will be moved to 
    createDirectory() 

    #takes the path names one at a time and then passes them to copyFiles 
    for pathName in in_file: 
     copyFiles(pathName) 

Output i get from running my code

Die Ausgabe sollte die 0 bis 4 Dateien unter jedem Diretory haben.

Vielen Dank für die Hilfe!

+1

Könnten Sie bitte den Codeeindruck des von Ihnen geposteten Samples korrigieren und vielleicht den 'Baum' eines Verzeichnisses (gekürzte Version) hinzufügen – Sergey

+0

Wild rate: Kommt die '.ini' Datei von Windows und läuft auf irgendeiner Art von Unix? – cdarke

+0

Verwenden Sie ['with'] (http://stackoverflow.com/q/3012488/1394393), um Dateien zu öffnen (und zu schließen). Außerdem ist 'ini' eine ungeeignete Erweiterung, wenn Ihre Datei nur einen einzelnen Pfad pro Zeile enthält. [ini] (https://en.wikipedia.org/wiki/INI_file) hat ein spezifisches Format. (Kein bestimmter Standard wird * vollständig * übernommen, aber alle gängigen Implementierungen verwenden '[sections]' und 'name = value' Paare mindestens.) – jpmc26

Antwort

0

Die pathName erhalten Sie, wenn das Iterieren über die Datei ein Zeilenumbruchzeichen am Ende für jede Zeile aber die letzte hat. Deshalb erhalten Sie die Leerzeilen in Ihrer Ausgabe, nachdem jeder Pfad gedruckt wurde.

Sie müssen strip auf Ihre Pfade rufen Sie die Zeilenumbrüche zu entfernen:

for pathName in in_file: 
    copyFiles(pathname.strip()) 

Sie restriktivere und rstrip('\n') verwenden könnte, aber ich vermute, immer von allen führenden und nachfolgenden Leerzeichen los ist sowieso besser.