PythonでのUnixファイル名パターンマッチング(fnmatch)
Unixシェルコマンドラインで使用されるワイルドカードパターンは、正規表現の構文とは異なります。 Pythonの標準ライブラリでは、fnmatchモジュールがUnixワイルドカードパターンを提供します。
fnmatchモジュールでは以下の関数が定義されています
fnmatch()
この関数には、ファイル名と文字列パターンの2つのパラメーターが必要です。ファイルの名前は指定されたパターンと一致し、関数はTrueまたはFalseを返します。
次の例は、現在のディレクトリのパターン「*.py」に一致するすべてのファイルを一覧表示します。
>>> import glob,fnmatch >>> for files in (glob.glob('*.*')): if (fnmatch.fnmatch(files, "*.py")): print (files)
fnmatchcase()
この関数はfnmatch()に似ています。ただし、この関数は、ファイル名とパターンの大文字と小文字を区別するマッチングを実行します。
次の例では、名前が「l」で始まり、拡張子が「.py」のすべてのファイルが、最初にファイルリストオブジェクトに収集されます。 fnmatch()関数は、「lo」文字で始まる名前のみを出力するために適用されます。
>>> files=glob.glob("l*.*") >>> files ['LICENSE.txt', 'lines.txt', 'listwidget.ui', 'lo1.ui', 'lo2.ui', 'lo3.ui', 'logo.png', 'logo.svg', 'lw.ui'] >>> for file in files: if fnmatch.fnmatchcase(file,"lo*.*")==True: print (file) lo1.ui lo2.ui lo3.ui logo.png logo.svg
filter()
この関数は、名前が指定されたパターンパラメータと一致するファイルのみを返します。
次のステートメントは、現在のディレクトリ内のすべてのファイルのうち、拡張子が「.txt」のファイルのリストを返します。
>>> fnmatch.filter(files,"*.txt") ['a!.txt', 'data().txt', 'dict.txt', 'json.txt', 'LICENSE.txt', 'lines.txt', 'msg.txt', 'NEWS.txt', 'test.txt', 'zen.txt', 'zen1.txt', 'zenbak.txt']
translate()
この関数は、UNIXスタイルのパターンを対応する正規表現形式に変換するのに役立ちます。 translate()関数の戻り値は、re moduleのcompile()関数を使用して正規表現に変換する必要があります。次に、これを使用してパターンを照合します。
>>> pattern="*.txt" >>> import re >>> reg=fnmatch.translate(pattern) >>> reg '(?s:.*\\.txt)\\Z' >>> rec=re.compile(reg) >>> for file in glob.glob("*.*"): if re.match(rec,file): print (file)
この記事では、fnmatchモジュールの機能について説明しました。
-
Pythonでパターンを印刷する方法は?
Pythonのパターンは、ネストされたforループを使用して印刷できます。外側のループは行数を反復処理するために使用され、内側のループは列数を処理するために使用されます。印刷ステートメントは、要件に応じてさまざまなパターンを形成するように変更されます。 パターンには、星型、数字型、アルファベット型があります。パターンは、さまざまな形、三角形、ピラミッドなどにすることができます。 例 これらのパターンはすべて、これらの異なるパターンを形成する変更されたprintステートメントを含むforループを使用して印刷できます。 これらのパターンの印刷の基本的な考え方は同じですが、わずかな違いが
-
Pythonの葉序パターン?
葉序パターンとは何ですか? 戻ってみると、植物学のクラスや植物の世界では、葉序とは、フィボナッチスパイラルに見られるものと同様に、植物の茎に花、葉、または種子を配置することを意味します。フィボナッチ数列に基づくフィボナッチスパイラルは、パスカルの三角形に似たパターンに従う数字のセットです。フィボナッチ数列は-1、1、2、3、5、8、13、21、34、55、89、144などのようなものです。したがって、フィボナッチ数列は以前の数の合計です。 フィボナッチスパイラル 私たちは通常、私たちの周りのオブジェクトを理解するために対称性とパターンを探します。気付かないうちに、私たちの目はフィボナッチ数