Os.walk не будет работать с каталогом, полученным через 'match.group (0) .encode (' string-escape ')'

Я использую os.walk для поиска файлов в определенных каталогах.

Это тестовый код, который не будет делать то, что должен:

import os, re

cwd = os.getcwd() 
directory= 'Box II'
dirpattern = re.compile(r'^.*?\\'+directory+'.*?', re.M)

for root, dirs, files in os.walk(os.path.abspath(cwd)):

    if dirpattern.search(root):
        match = dirpattern.search(root)
        match = match.group(0).encode('string-escape')

print match '''OUTPUT = D:\\dir1\\dir2\\dir3'''

for roots, dirss, filess in os.walk(match):
print filess '''OUPUT = gives nothing'''

если я наберу dirname во втором цикле, как это

  for roots, dirss, filess in os.walk('D:\\dir1\\dir2\\dir3'):
      print filess

Я получаю правильный вывод.

У dirnames есть пробелы.

То, что я печатаю, это именно то, что напечатано для совпадения из первого цикла. Почему это не работает?

Это match.group (0) не строка?

Если я сделаю это:

import os, re

cwd = os.getcwd() 
directory= 'Box II'
dirpattern = re.compile(r'^.*?\\'+directory+'.*?', re.M)

for root, dirs, files in os.walk(os.path.abspath(cwd)):

    if dirpattern.search(root):
        match = dirpattern.search(root)
        match = match.group(0)

и используйте эту функцию:

escape_dict={'\\':r'\\'}

def raw(text):
"""Returns a raw string representation of text"""
 return "".join([escape_dict.get(char,char) for char in text])

match1= raw(match)
print match '''OUTPUT = D:\dir1\dir2\dir3 '''
print match1 '''OUTPUT = D:\\dir1\\dir2\\dir3''' 

for roots, dirss, filess in os.walk('match1'):

    print filess '''OUTPUT= nothing'''

os.walk тоже не работает, но когда я делаю это:

match= 'D:\dir1\dir2\dir3'
match1= raw(match)
print match1 '''OUTPUT= D:\\dir1\\dir2\\dir3'''

os.walk работает:

for roots, dirss, filess in os.walk('match1'):
    print filess '''OUTPUT= [file1,file2,file3]'''

В чем разница между совпадением, полученным из регулярного выражения?

match = match.group(0)
print match '''OUTPUT = D:\dir1\dir2\dir3 '''

и совпадение только что записано в виде строки

match = 'D:\dir1\dir2\dir3'

Ответы на вопрос(1)

Ваш ответ на вопрос