globとは何か
glob
は、Unixシェルが使用するワイルドカード文字を含むパス名の展開を行うためのライブラリ関数です。Pythonでもこのglob
モジュールを利用することで、特定のパターンに一致するファイルやディレクトリのパスを簡単に取得することができます。
例えば、*.txt
というパターンを指定すれば、カレントディレクトリにある全ての.txt
ファイルを取得することができます。また、**
を用いることで、サブディレクトリも含めた検索が可能となります。
しかし、glob
はあくまでパターンマッチングに基づいてファイルを検索する機能であり、より複雑な検索条件を指定することはできません。そのため、特定の属性を持つファイルを検索したい場合などは、他の方法を検討する必要があります。それについては後述の「glob以外のファイル操作方法」で詳しく説明します。
Pythonでのglobの使用方法
Pythonでglob
を使用するには、まずglob
モジュールをインポートします。以下に基本的な使用方法を示します。
import glob
# カレントディレクトリの全ての.txtファイルを取得
txt_files = glob.glob('*.txt')
# サブディレクトリも含めた全ての.txtファイルを取得
all_txt_files = glob.glob('**/*.txt', recursive=True)
上記のコードでは、glob.glob
関数を使用しています。この関数は引数としてパターンを受け取り、そのパターンに一致する全てのファイルパスをリストとして返します。
また、**
をパターンに含めることで、サブディレクトリも検索対象に含めることができます。ただし、この場合はrecursive=True
を指定する必要があります。
これらの基本的な使用方法を理解した上で、glob
を使って様々なパターンのファイルを検索することができます。ただし、glob
はあくまでパターンマッチングに基づいてファイルを検索する機能であり、より複雑な検索条件を指定することはできません。そのため、特定の属性を持つファイルを検索したい場合などは、他の方法を検討する必要があります。それについては後述の「glob以外のファイル操作方法」で詳しく説明します。
glob以外のファイル操作方法
Pythonでは、glob
以外にも様々なファイル操作方法が提供されています。ここでは、その中でも特に有用なpathlib
モジュールと正規表現を使った方法について説明します。
pathlibを使ったファイル操作
pathlib
はPython 3.4で導入されたモジュールで、パス操作をより直感的に行うことができます。以下に基本的な使用方法を示します。
from pathlib import Path
# カレントディレクトリの全ての.txtファイルを取得
txt_files = Path('.').glob('*.txt')
# サブディレクトリも含めた全ての.txtファイルを取得
all_txt_files = Path('.').rglob('*.txt')
pathlib
のPath
クラスを使用すると、パス操作をオブジェクト指向的に行うことができます。また、glob
メソッドとrglob
メソッドを使用することで、それぞれカレントディレクトリのみ、サブディレクトリも含めたファイルの検索が可能です。
正規表現を使ったファイル操作
正規表現を使うことで、より複雑なパターンのファイルを検索することができます。Pythonのre
モジュールを使用することで、正規表現によるマッチングを行うことができます。
import re
import os
# カレントディレクトリの全てのファイルを取得
files = os.listdir('.')
# .txtまたは.csvの拡張子を持つファイルを取得
pattern = re.compile(r'.*\.(txt|csv)$')
txt_or_csv_files = [f for f in files if pattern.match(f)]
上記のコードでは、os.listdir
関数を使用してカレントディレクトリの全てのファイルを取得し、その後で正規表現を使用して.txtまたは.csvの拡張子を持つファイルをフィルタリングしています。
これらの方法を組み合わせることで、glob
では難しかった複雑な条件に基づくファイル操作を行うことができます。ただし、これらの方法もそれぞれ一長一短がありますので、適切な方法を選択することが重要です。具体的な使用例や詳細な説明については、公式ドキュメンテーションを参照してください。
pathlibを使ったファイル操作
Pythonのpathlib
モジュールは、ファイルシステムのパスを操作するためのオブジェクト指向的な方法を提供します。以下に基本的な使用方法を示します。
from pathlib import Path
# カレントディレクトリのPathオブジェクトを作成
p = Path('.')
# カレントディレクトリの全ての.txtファイルを取得
txt_files = list(p.glob('*.txt'))
# サブディレクトリも含めた全ての.txtファイルを取得
all_txt_files = list(p.rglob('*.txt'))
上記のコードでは、まずPath
クラスのインスタンスを作成しています。このインスタンスは、ファイルシステムのパスを表現します。そして、glob
メソッドとrglob
メソッドを使用して、それぞれカレントディレクトリのみ、サブディレクトリも含めたファイルの検索が可能です。
また、pathlib
はファイルやディレクトリの作成、削除、移動などの操作もサポートしています。以下にその例を示します。
# 新しいディレクトリを作成
new_dir = p / 'new_dir'
new_dir.mkdir(exist_ok=True)
# ファイルを移動
(old_dir / 'file.txt').rename(new_dir / 'file.txt')
# ファイルを削除
(new_dir / 'file.txt').unlink()
# ディレクトリを削除
new_dir.rmdir()
これらの操作を組み合わせることで、glob
では難しかった複雑な条件に基づくファイル操作を行うことができます。ただし、これらの方法もそれぞれ一長一短がありますので、適切な方法を選択することが重要です。具体的な使用例や詳細な説明については、公式ドキュメンテーションを参照してください。
正規表現を使ったファイル操作
Pythonのre
モジュールを使用すると、正規表現によるパターンマッチングを行うことができます。これを利用して、特定のパターンに一致するファイルを検索することができます。
以下に、.txt
または.csv
の拡張子を持つファイルを検索する基本的なコードを示します。
import os
import re
# カレントディレクトリの全てのファイルを取得
files = os.listdir('.')
# .txtまたは.csvの拡張子を持つファイルを取得
pattern = re.compile(r'.*\.(txt|csv)$')
txt_or_csv_files = [f for f in files if pattern.match(f)]
上記のコードでは、まずos.listdir
関数を使用してカレントディレクトリの全てのファイルを取得しています。その後、正規表現を使用して.txtまたは.csvの拡張子を持つファイルをフィルタリングしています。
このように、正規表現を使用することで、glob
では難しかった複雑な条件に基づくファイル操作を行うことができます。ただし、正規表現はその性質上、複雑で理解が難しい場合があります。そのため、正規表現を使用する際は、パターンが正しく一致するかどうかを確認することが重要です。具体的な使用例や詳細な説明については、公式ドキュメンテーションを参照してください。