Python Os.walk无法使用通过';match.group(0).encode(';字符串转义';)';
我正在使用os.walk搜索特定目录中的文件 这是一个测试代码,它不会做它应该做的事情:Python Os.walk无法使用通过';match.group(0).encode(';字符串转义';)';,python,os.walk,Python,Os.walk,我正在使用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):
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
我得到了正确的输出
这些名称有空格
我键入的内容正是第一个循环中为匹配而打印的内容。为什么不起作用
匹配组(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)
match= 'D:\dir1\dir2\dir3'
match1= raw(match)
print match1 '''OUTPUT= D:\\dir1\\dir2\\dir3'''
并使用此功能:
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也不起作用,但当我这样做时:
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)
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'
您可能应该从代码中删除
encode('string-escape')
。Omg i c为什么没有答案,这里每分钟发布5个问题!!!你的间隔全错了。你能纠正它吗,因为你的代码可能有几个意思。嘿,本,你能指定什么间隔吗,我不明白你的意思谢谢你的回答Amr!我使用encode('string-escape')使打印的输出匹配。组(0)''output=D:\dir1\dir2\dir3''看起来像打印匹配。组(0)。encode('string-escape')''output=D:\\dir1\\dir2\\dir3'''如何以与我用代码等发布问题相同的方式对您的答案进行评论?encode('string-escape'))
是您的代码失败的原因,因为当您稍后将match传递给os.walk
,这就像您这样做:os.walk('D:\\\\dir1\\\\dir2\\\\\dir3')
,尝试删除它,也许您的代码会工作。啊,好的!我编辑了我的问题,扔掉了.encode部分,并用\\替换\的功能。在底部向上看。仍然存在相同的问题。对于os.walk(os.path.abspath(match)):打印文件“''OUTPUT=nothing'”