2016-07-19 4 views
0

В настоящее время я работаю над некоторым кодом, который будет просматривать несколько каталогов из файла .ini, а затем распечатать и скопировать их в новый каталог. Я столкнулся с проблемой, когда цикл for, который печатает файлы, выполняется один раз, когда он должен выполняться 5 раз. Как я могу его исправить, так что цикл for работает каждый раз, когда он вызывается?Python for loop выполняется только один раз

Код:

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

Выход должен иметь от 0 до 4 файлов под каждым diretory.

Благодарим за помощь!

+1

Не могли бы вы исправить отступ в коде образца, который вы отправили, и, возможно, добавить «дерево» каталога (сокращенная версия). – Sergey

+0

Дикая догадка: файл '.ini' поступает из Windows и вы работаете на некотором роде Unix? – cdarke

+0

Для открытия (и закрытия) файлов используйте ['with'] (http://stackoverflow.com/q/3012488/1394393). Кроме того, 'ini' является несоответствующим расширением, если ваш файл представляет собой всего лишь один путь в строке. ['ini'] (https://en.wikipedia.org/wiki/INI_file) имеет определенный формат. (Никакой конкретный стандарт не принят полностью, но во всех распространенных реализациях минимально используются пары '[sections]' и 'name = value'.) – jpmc26

ответ

0

pathName вы получаете, когда итерация по файлу имеет символ новой строки в конце для каждой строки, но последний. Вот почему вы получаете пустые строки в своем выходе после печати каждого пути.

Вы должны вызвать strip на ваших путях, чтобы удалить переводы строк:

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

Вы мог бы быть более ограничительными и использовать rstrip('\n'), но я подозреваю, избавившись от всех начальных и конечных пробелов лучше в любом случае.

Смежные вопросы