我正在使用 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'''
如果我像这样在第二个循环中输入目录名
for roots, dirss, filess in os.walk('D:\\dir1\\dir2\\dir3'):
print filess
我得到了正确的输出。
目录名有空格。
我输入的正是第一个循环中为匹配而打印的内容。为什么它不起作用?
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'