Сравнение путей к файлам с подстановочными знаками

#python

#python

Вопрос:

У меня есть папка с несколькими вложенными папками:

 C:/Users/stacey/WorkDocs/port_aport_1m
C:/Users/stacey/WorkDocs/port_ajob_lists
C:/Users/stacey/WorkDocs/port_ajob_lists_bu
C:/Users/stacey/WorkDocs/port_ajob_lists_bu2
C:/Users/stacey/WorkDocs/port_aroll_185_oe_2018-09-07
C:/Users/stacey/WorkDocs/port_aroll_186_oe_2018-09-14
C:/Users/stacey/WorkDocs/port_aroll_187_oe_2018-09-21
C:/Users/stacey/WorkDocs/port_aroll_4_oe_2015-03-20
C:/Users/stacey/WorkDocs/port_aroll_5_oe_2015-03-27
C:/Users/stacey/WorkDocs/port_aroll_6_oe_2015-04-03
 

Если последняя папка в пути начинается с «roll», я хотел бы затем опросить эти папки. Я пытаюсь найти папки, используя следующее:

 def main():

 folder = 'C:/Users/stacey/WorkDocs/port_a'

    for dirname, dirs, files in os.walk(folder):

        if dirname == folder 'roll_*':
            print('dirname')
 

Таким образом, текущий ожидаемый результат будет выглядеть следующим образом:

 C:/Users/stacey/WorkDocs/port_aroll_185_oe_2018-09-07
C:/Users/stacey/WorkDocs/port_aroll_186_oe_2018-09-14
C:/Users/stacey/WorkDocs/port_aroll_187_oe_2018-09-21
C:/Users/stacey/WorkDocs/port_aroll_4_oe_2015-03-20
C:/Users/stacey/WorkDocs/port_aroll_5_oe_2015-03-27
C:/Users/stacey/WorkDocs/port_aroll_6_oe_2015-04-03
 

Однако я не получаю никаких выходных данных. Я думаю, возможно, я неправильно установил сравнение с подстановочными знаками, но не уверен. Как я могу вернуть желаемый результат?

Ответ №1:

Две проблемы. Во-первых, не забывайте использовать необработанную строку всякий раз, когда у вас есть косая черта, например:

 folder = r'C:/Users/stacey/WorkDocs/port_a'
 

Во-вторых, вы не можете ожидать, что Python знает ваш синтаксис с == глобализацией при сравнении. Однако, поскольку вы выполняете сопоставление префиксов, просто проверьте префикс:

 for dirname, dirs, files in os.walk(folder):
    if dirname.startswith(folder r'roll_'):
        print('dirname')
 

Но на самом деле, вы можете просто использовать модуль glob в Python для выполнения всего этого цикла:

 import glob
for dirname in glob.glob(folder r'roll_*'):
    print(dirname)