2016-10-27 2 views
3

Я пытаюсь найти файл *tech.so в данном пути, как показано ниже, но почему-то fnmatch.fnmatch(name, pattern) не работает, может кто-нибудь предложить, как исправить это?сбой шаблона при поиске файла

import os, fnmatch 

path = "\\\\location1\\build1\\obj\\vendor\\qcom\\opensource\\tech" 

def find(pattern, path): 
    result = [] 
    for root, dirs, files in os.walk(path): 
     for name in files: 
      #print name 
      if fnmatch.fnmatch(name, pattern): 
       result.append(os.path.join(root, name)) 
    return result 

result = find('*.tech.so', path) 
print result//prints empty string 
+0

remove \ in '* .tech \ .so' - это не регулярное выражение. - [fnmatch] (https://docs.python.org/2/library/fnmatch.html) – furas

+0

по-прежнему не соответствует – user2125827

+0

В вашем пути есть обратная косая черта, что неверно, за исключением Windows (и косые черты работают в Windows, просто а не из командной строки). Вы уверены, что os.walk находит какие-либо матчи? – cco

ответ

1

Ваш шаблон матча *.tech.so, но имя, которое вы ищете, caq_cdl3_tech.so

fnmatch модели не так же, как регулярное выражение, так что . соответствует только буквальным ., а не «какой-либо одной символа ", как это было бы в регулярном выражении.

используя *tech.so или *_tech.so как шаблон должен работать.

+0

также вывод печатает в формате списка, например '['\\\\ location1 \\ build1 \\ obj \\ vendor \\ qcom \\ opensource \\ tech \\ caq_cdl3_tech.so']', как его получить в окне поддерживаемый доступный путь – user2125827

+0

Вы имеете в виду, что это то, что вы получаете от 'print result' после смены шаблона? – cco

+0

yes, thats correct – user2125827

Смежные вопросы