2016-11-16 6 views
0

Я использую Python в Visual Studio, перешагнув код в режиме отладки. После того, как первый оператор if..continue проверен, управление возвращается к for file.., как я и ожидал.Python 'if ... continue' неожиданно возвращает управление родительскому циклу текущего цикла

Однако, через 2 прохода, когда он падает вниз к следующему if..continue заявление, управление возвращается к началу цикла родительского for dir, когда я ожидал, что он вернется к for file.. снова. Цель состоит в том, чтобы игнорировать любые подкаталоги и файлы csv с именами формы _*.csv (я надеюсь, что мне не нужно вникать в изучение дополнительных образцов, соответствующих материалам сейчас - если возможно, нужно выполнить текущую небольшую задачу)

for dir in os.listdir(masterDirPath):  
    currentDir = masterDirPath + dir 

    # iterate through csv logs within current data folder, aggregating data 
    for file in os.listdir(currentDir): 

     path = os.path.join(currentDir, file) 
     if os.path.isdir(path): 
      # skip directories 
      continue 

     if file.startswith('_'): 
      # skip custom files 
      continue 

     if file.endswith(".csv"): 
      # open log file 
      . 
      . 
      . 
+0

Возможно, вы уже петельные через все файлы в этом каталоге? – Moberg

+0

@Moberg - привет, спасибо за ответ, но нет, я проверил и дважды проверил, что я ищу в своей тестовой папке, которая преднамеренно содержит подкаталог, действительный «csv» для проверки и csv с именем '_testMe.csv. Вы говорите, что из того, что вы можете сказать, оно должно работать так, как я ожидал? – Margarita

+0

Добавить 'print '- {} -". Format (file) 'в начале вашего цикла. Возможно, ваша ОС добавляет некоторые пробелы до/после имени файла. если это так, вы можете попробовать 'file = file.strip()' – woockashek

ответ

3

из того, что я понимаю - у вас есть список каталогов в os.listdir и список файлов в каждой из этих каталогов.

В идеале вы должны загрузить ОДИН каталог в currentDir -> этот каталог должен проходить через каждый из файлов.

Я считаю, что поток управления затронут, потому что вы назначаете тот же currentDir всем своим каталогам.

Попробуйте это:

for dir in os.listdir(masterDirPath):  
    currentDir = masterDirPath + dir 

    # iterate through csv logs within current data folder, aggregating data 
    ##### indent this part of your code ##### 

    for file in os.listdir(currentDir): 
     path = os.path.join(currentDir, file) 

     if os.path.isdir(path): 
      # skip directories 
      continue 

     if file.startswith('_'): 
      # skip custom files 
      continue 

     if file.endswith(".csv"): 
      # open log file 
      . 
      . 
      . 
+0

Спасибо - я предполагаю, что это была ошибка отступа - я скопировал и вставил вашу версию, и теперь она работает нормально. – Margarita