globと反復処理
globパターンでファイルを検索します
「globと反復処理」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
ファイルの検索
pathlibを使うと、ディレクトリの内容を一覧表示したり、パターンに一致するファイルを検索したりするのが簡単です。主なメソッドはiterdir、glob、rglobです。
サンプルのディレクトリ構成を準備する
これらのメソッドを確認するため、まず小さなファイル構成を作成します。この準備では標準ライブラリだけを使用します。
from pathlib import Path
root = Path('sample')
root.mkdir(exist_ok=True)
(root / 'a.txt').write_text('1')
(root / 'b.txt').write_text('2')
(root / 'c.log').write_text('3')
print('created files')iterdirで内容を一覧表示する
iterdir()は、ディレクトリ直下にある各エントリを、項目ごとに1つのPathとして返します。
from pathlib import Path
root = Path('sample')
for entry in sorted(root.iterdir()):
print(entry.name)パターンを指定したglob
glob()は、シェル形式のパターンに一致するエントリを検索します。ワイルドカードの*は、任意の長さの文字列に一致します。
from pathlib import Path
root = Path('sample')
for txt in sorted(root.glob('*.txt')):
print(txt.name)1文字のワイルドカード
ワイルドカードの?は、ちょうど1文字に一致します。文字数が決まった名前を扱うときに便利です。
from pathlib import Path
root = Path('sample')
for m in sorted(root.glob('?.txt')):
print(m.name)文字の範囲
角括弧は、シェルのglobと同じように、集合または範囲に含まれる任意の1文字に一致します。
from pathlib import Path
root = Path('sample')
for m in sorted(root.glob('[ab].txt')):
print(m.name)rglobによる再帰的なglob
rglob()は、ディレクトリとそのすべてのサブディレクトリを検索します。glob('**/pattern')と同等です。
from pathlib import Path
root = Path('sample')
(root / 'nested').mkdir(exist_ok=True)
(root / 'nested' / 'deep.txt').write_text('x')
for m in sorted(root.rglob('*.txt')):
print(m)一致件数のカウント
Globの結果はイテレーターです。list()でラップすると、一致した項目の件数を数えたり、再利用したりできます。
from pathlib import Path
root = Path('sample')
txts = list(root.rglob('*.txt'))
print('found', len(txts), 'text files')反復処理中のフィルタリング
globとis_fileまたはis_dirの確認を組み合わせると、結果を正確にフィルタリングできます。
from pathlib import Path
root = Path('sample')
files = [p for p in root.iterdir() if p.is_file()]
for f in sorted(files):
print(f.name)見つかったファイルの処理
一致するファイルが見つかったら、それぞれを読み取れます。ここでは、構成内にあるすべてのテキストファイルの内容を合計します。
from pathlib import Path
root = Path('sample')
total = 0
for p in root.rglob('*.txt'):
text = p.read_text().strip()
if text.isdigit():
total += int(text)
print('total:', total)Glob結果の並べ替え
Globは特定の順序を保証しません。レポートの作成などで決定的な出力が必要な場合は、結果をsorted()でラップします。
from pathlib import Path
root = Path('sample')
for p in sorted(root.glob('*'), key=lambda x: x.name):
print(p.name)クイックチェック
globとrglobの違いは何ですか?
まとめ
globパターンを使ってファイルを検索する方法を学びました。
iterdirは直下の内容を一覧表示します。globはパターン(*、?、[...])に一致する項目を検索します。rglobは再帰的に検索します。- globを
is_fileまたはis_dirのフィルターと組み合わせ、一致した項目を読み取ります。
よくある質問
「globと反復処理」レッスンは無料ですか?
はい。「globと反復処理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「globと反復処理」で何を学びますか?
globパターンでファイルを検索します ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「globと反復処理」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Pathオブジェクト
- ファイルの読み書き
- globと反復処理
- パスの操作