0

コマンド ラインから文字列を受け取り、その文字列に一致するすべてのファイル名をフォルダー (サブフォルダーも含む) 内に出力するプログラムを作成するにはどうすればよいですか?

パターンマッチを探しています。

4

2 に答える 2

0
    import sys, os, operator, re
    def filesMatching(pattern, top):
        return [f for f in os.listdir(top) if os.path.isfile(os.path.join(top,f)) and re.match(pattern, f)] + reduce (operator.__concat__, [filesMatching (pattern, os.path.join(top,f)) for f in os.listdir (top) if os.path.isdir(os.path.join(top,f))], [])

    print (filesMatching (sys.argv[1], sys.argv[2]))
于 2013-03-05T11:33:24.233 に答える
0

このテクニックを使用できます

import os, fnmatch, sys
def all_files(root, patterns='*', single_level=False, yield_folders=False):
    # Expand patterns from semicolon-separated string to list
    patterns = patterns.split(';')
    for path, subdirs, files in os.walk(root):
        if yield_folders:
            files.extend(subdirs)
        files.sort( )
        for name in files:
            for pattern in patterns:
                if fnmatch.fnmatch(name, pattern):
                    yield os.path.join(path, name)
                    break
        if single_level:
            break

user_definedpath, filepattern = sys.argv[1], sys.argv[2]
# Invoking the all_files and putting them into list
#thefiles = list(all_files('/tmp', '*.py;*.htm;*.html'))
thefiles = list(all_files(user_definedpath, filepattern))
print thefiles

このファイルを次のように保存できますsample.py次に、次の/tmp/abc/sample.py ように実行できますpython /tmp/abc/sample.py "/tmp/xyz/" "*.py;*.txt"

于 2013-03-05T10:25:41.857 に答える