コマンド ラインから文字列を受け取り、その文字列に一致するすべてのファイル名をフォルダー (サブフォルダーも含む) 内に出力するプログラムを作成するにはどうすればよいですか?
パターンマッチを探しています。
コマンド ラインから文字列を受け取り、その文字列に一致するすべてのファイル名をフォルダー (サブフォルダーも含む) 内に出力するプログラムを作成するにはどうすればよいですか?
パターンマッチを探しています。
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]))
このテクニックを使用できます
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"