Os.walk funktioniert nicht mit Verzeichnissen, die mit 'match.group (0) .encode (' string-escape ')' erstellt wurden

Ich verwende os.walk, um nach Dateien in bestimmten Verzeichnissen zu suchen.

Dies ist ein Testcode, der nicht das tut, was er sollte:

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'''

wenn ich den dirnamen so in die zweite schleife eingebe

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

Ich bekomme die richtige Ausgabe.

Die Dirnames haben Leerzeichen.

Was ich eingebe, ist genau das, was für den Abgleich aus der ersten Schleife gedruckt wird. Warum funktioniert es nicht?

Ist die match.group (0) keine Zeichenfolge?

Wenn ich das mache:

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)

und benutze diese Funktion:

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 funktioniert auch nicht, aber wenn ich das tue:

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

os.walk funktioniert:

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

Was ist der Unterschied zwischen Übereinstimmungen, die von einem regulären Ausdruck erhalten wurden?

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

und Übereinstimmung, die gerade als Zeichenfolge geschrieben wurde

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage