Python
 Computer >> コンピューター >  >> プログラミング >> Python

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モジュールの機能について説明しました。


  1. Pythonでパターンを印刷する方法は?

    Pythonのパターンは、ネストされたforループを使用して印刷できます。外側のループは行数を反復処理するために使用され、内側のループは列数を処理するために使用されます。印刷ステートメントは、要件に応じてさまざまなパターンを形成するように変更されます。 パターンには、星型、数字型、アルファベット型があります。パターンは、さまざまな形、三角形、ピラミッドなどにすることができます。 例 これらのパターンはすべて、これらの異なるパターンを形成する変更されたprintステートメントを含むforループを使用して印刷できます。 これらのパターンの印刷の基本的な考え方は同じですが、わずかな違いが

  2. Pythonの葉序パターン?

    葉序パターンとは何ですか? 戻ってみると、植物学のクラスや植物の世界では、葉序とは、フィボナッチスパイラルに見られるものと同様に、植物の茎に花、葉、または種子を配置することを意味します。フィボナッチ数列に基づくフィボナッチスパイラルは、パスカルの三角形に似たパターンに従う数字のセットです。フィボナッチ数列は-1、1、2、3、5、8、13、21、34、55、89、144などのようなものです。したがって、フィボナッチ数列は以前の数の合計です。 フィボナッチスパイラル 私たちは通常、私たちの周りのオブジェクトを理解するために対称性とパターンを探します。気付かないうちに、私たちの目はフィボナッチ数