2016-10-27 13 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

\ '* .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

はい、それは正しい – user2125827

関連する問題