2011-01-09 7 views
2

私は正規表現に適用されるファイルのリストを取得したいと思います。私はos.walkを使うべきだと思いますが、どうすれば正規表現でそれを使うことができますか?os.walk with regex

ありがとうございました。

+5

いくつかのコードを投稿してくださいあなたが使用しようとした取得したエラーメッセージを含め、提案されたソリューションを投稿してください。これは「www.do-my-job-for-me.com」ではありません。 –

答えて

5

正規表現をfoo/*.txtなどのシェル式に変換できる場合は、globを使用できます。

私はこれを実装するSTDLIBで何かを認識してないんだけど、それがコードに難しいことではありません
>>> import glob 
>>> glob.glob('./[0-9].*') 
['./1.gif', './2.txt'] 
>>> glob.glob('*.gif') 
['1.gif', 'card.gif'] 
>>> glob.glob('?.gif') 
['1.gif'] 
6

import os, os.path 

def iter_matching(dirpath, regexp): 
    """Generator yielding all files under `dirpath` whose absolute path 
     matches the regular expression `regexp`. 
     Usage: 

      >>> for filename in iter_matching('/', r'/home.*\.bak'): 
      .... # do something 
    """ 
    for dir_, dirnames, filenames in os.walk(dirpath): 
     for filename in filenames: 
      abspath = os.path.join(dir_, filename) 
      if regexp.match(abspath): 
       yield abspath 

以上の一般的な:

import os, os.path 

def filter_filenames(dirpath, predicate): 
    """Usage: 

      >>> for filename in filter_filenames('/', re.compile(r'/home.*\.bak').match): 
      .... # do something 
    """ 
    for dir_, dirnames, filenames in os.walk(dirpath): 
     for filename in filenames: 
      abspath = os.path.join(dir_, filename) 
      if predicate(abspath): 
       yield abspath