0Pricing
Python Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Pathオブジェクト
  2. ファイルの読み書き
  3. globと反復処理
  4. パスの操作
← Python Academyに戻る