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

PythonでのUnixファイル名パターンマッチング


ここでは、Pythonを使用してUNIXシェルスタイルのパターンマッチング手法を取得する方法を説明します。 fnmatchというモジュールがあります 、作業を行うために使用されます。このモジュールは、ファイル名をパターンと比較するために使用され、一致に応じてTrueまたはFalseを返します。

最初に使用するには、 fnmatchをインポートする必要があります 標準ライブラリモジュール。

import fnmatch

Unixターミナルには、パターンに一致するいくつかのワイルドカードがあります。これらは以下のようなものです-

  • 「*」アスタリスクはすべてに一致するために使用されます。
  • 「?」疑問符は、1つの文字を照合するためのものです。
  • [seq]シーケンスは、文字を順番に照合するために使用されます
  • [!seq] Not in Sequenceは、シーケンスに存在しない文字を照合するために使用されます。

アスタリスクまたは疑問符を文字として検索する場合は、[*]または[?]

のように使用する必要があります。

fnmatch()メソッド

fnmatch()メソッドは2つの引数を取ります。これらはファイル名とパターンです。この関数は、ファイル名が指定されたパターンと一致するかどうかを確認するために使用されます。オペレーティングシステムで大文字と小文字が区別される場合、パラメータは照合前に大文字または小文字に正規化されます。

サンプルコード

import fnmatch
import os
file_pattern = 'test_f*'
files = os.listdir('./unix_files')
for filename in files:
   print('File: {}\t: {}'.format(filename, fnmatch.fnmatch(filename, file_pattern)))

出力

$ python3 310.UNIX_filename.py
File: test_file5.txt : True
File: test_file2.png : True
File: test_file1.txt : True
File: another_file.txt : False
File: TEST_FILE4.txt : False
File: abc.txt : False
File: test_file3.txt : True
$

filter()メソッド

filter()メソッドも2つのパラメーターを取ります。最初のものは名前であり、2番目のものはパターンです。このパターンは、すべてのファイル名のリストから一致するファイル名のリストを検索します。

サンプルコード

import fnmatch
import os
file_pattern = 'test_f*'
files = os.listdir('./unix_files')
match_file = fnmatch.filter(files, file_pattern)
   print('All files:' + str(files))
      print('\nMatched files:' + str(match_file))

出力

$ python3 310.UNIX_filename.py
All files:['test_file5.txt', 'test_file2.png', 'test_file1.txt', 'another_file.txt', 'TEST_FILE4.txt', 'abc.txt', 'test_file3.txt']
Matched files:['test_file5.txt', 'test_file2.png', 'test_file1.txt', 'test_file3.txt']
$

translate()メソッド

translate()メソッドは1つのパラメーターを取ります。パラメータはパターンです。この関数を使用して、シェルスタイルのパターンを別のタイプのパターンに変換し、Pythonの正規表現を使用して一致させることができます。

サンプルコード

import fnmatch, re
file_pattern = 'test_f*.txt'
unix_regex = fnmatch.translate(file_pattern)
regex_object = re.compile(unix_regex)
   print('Regular Expression:' + str(unix_regex))
      print('Match Object:' + str(regex_object.match('test_file_abcd123.txt')))

出力

$ python3 310.UNIX_filename.py
Regular Expression:(?s:test_f.*\.txt)\Z
Match Object:<_sre.SRE_Match object; span=(0, 21), match='test_file_abcd123.txt'>
$

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

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

  2. Pythonの葉序パターン?

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