glob
Pythonでファイルを操作する際、特定のパターンに基づいてファイルを取得する必要がある場合があります。Pythonのglobモジュールは、ワイルドカード文字や "" を使用した再帰的な検索をサポートし、指定したパターンに一致するファイルのリストを作成する関数を提供します。以下はモジュールをインポートして使用する方法です:
import glob
txt_files = glob.glob('*.txt') # カレントディレクトリ内のすべての .txt ファイルを取得
print(txt_files, type(txt_files)) # .txt ファイルのリストとその型を表示
カレントディレクトリに3つのテキストファイル
file1.txt
、file2.txt
、file3.txt
があるとすると、出力は次のようになります:['file1.txt', 'file2.txt', 'file3.txt'] <class 'list'>
glob 関数はパターンを文字列として受け取り、そのパターンに一致するファイルやディレクトリのパスのリストを返します。
先ほどの例では、ゼロ文字以上にマッチするワイルドカード文字
*
を使用しました。そのため、*.txt
は .txt
で終わるすべてのファイルにマッチします。サブディレクトリ内のファイルを再帰的に検索することもできます:
nested_files = glob.glob('**/*.txt', recursive=True) # 再帰的にすべての .txt ファイルを取得
print(nested_files, type(nested_files)) # .txt ファイルのリストとその型を表示
カレントディレクトリに前述のファイルに加えて、
file4.txt
と file5.txt
を含む folder1
があると仮定すると、出力は次のようになります:['file1.txt', 'file2.txt', 'file3.txt', 'folder1/file4.txt', 'folder1/file5.txt'] <class 'list'>
ここでは、パターンに
**
を使用しています。このシンボルはパス名パターン内で、すべてのファイルとゼロ個以上のディレクトリやサブディレクトリを表します。また、関数がサブディレクトリを検索できるように recursive=True
引数を使用しました。そのため、'**/*.txt', recursive=True
はカレントディレクトリおよびそのサブディレクトリからすべての .txt
ファイルを取得します。これは、Pythonでファイルパスを処理し、ファイル操作のタスクを自動化するための便利な方法です。
チャレンジ: .py
ファイルを見つける
テックスタートアップの新しいデータサイエンティストとして、現在のプロジェクト内のすべての Python ファイルを整理するタスクが与えられました。ここ数週間の忙しさのため、Python ファイル(
.py
)はカレントディレクトリ中に散在しています。あなたの仕事は、glob を使用してカレントディレクトリに存在するすべての Python ファイル(.py
)をリストアップする Python プログラムを作成することです。しかし、ファイルの場所ではなく名前にのみ興味があるため、出力はディレクトリパスを含まないファイル名のみである必要があります。プログラムは入力を受け取る必要はありません。
プログラムの出力は、カレントディレクトリ内の Python ファイルの名前を含み、各名前は新しい行に表示される必要があります。出力にディレクトリパスを含めないでください。出力はアルファベット順にソートされている必要があります。
入力 | 出力 |
ㅤ | experiment.py
file1.py
file2.py
main.py
my_program.py |
プログラムがカレントディレクトリで実行されるため、出力には
main.py
ファイル(あなたのプログラムを含む)も含まれることに注意してください。Constraints
Time limit: 2 seconds
Memory limit: 512 MB
Output limit: 1 MB