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'
 Ben07 июн. 2012 г., 19:05
Ваш интервал все неправильно. Можете ли вы исправить это, поскольку ваш код может иметь несколько значений.
 Baf07 июн. 2012 г., 17:49
bump *: & quot; (почему вы не отвечаете?
 Baf07 июн. 2012 г., 19:10
Эй, Бен, ты можешь указать интервал, я не понимаю, что ты имеешь в виду
 Baf07 июн. 2012 г., 17:58
Боже мой, почему нет ответа, около 5 вопросов в минуту размещены здесь!

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

encode('string-escape') из вашего кода.

 07 июн. 2012 г., 18:50
encode('string-escape') причина, по которой ваш код не работает, потому что когда вы позже передадитеos.walkэто будет так, как вы сделали это:os.walk('D:\\\\dir1\\\\dir2\\\\dir3'), попробуйте удалить его, и, возможно, ваш код будет работать.
 07 июн. 2012 г., 18:52
также см. ниже поле комментария для подсказок форматирования.
 Baf07 июн. 2012 г., 18:29
спасибо за ответ амр! я использовал кодирование («string-escape»), чтобы сделать вывод print match.group (0) «». Выход = D: \ dir1 \ dir2 \ dir3 '' ' выглядит как print match.group (0) .encode ("string-escape") "" ВЫХОД = D: \\ dir1 \\ dir2 \\ dir3 ""
 Baf07 июн. 2012 г., 19:03
Ах хорошо! я отредактировал свой вопрос, выбросил часть .encode и использовал функцию, чтобы заменить \ на \\. посмотрите на это внизу. все та же проблема.
 Baf07 июн. 2012 г., 18:35
Как я могу прокомментировать ваш ответ таким же образом, как я разместил свой вопрос с кодом и т. д.?

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