プログラムを書いていると、pandasでファイルを読み込んだり、JSONファイルを読み込んだりなど、PC上の様々なファイルにアクセスしてデータを読み込むことがあります。globを使うことで、ファイルの一覧を柔軟に取得することができます。こちらの記事では簡単な使い方を見ていきます。
サンプルのデータ
globを利用してファイル一覧を取得するため、仮のディレクトリ構造を作成しました。サンプルのスクリプトと、サンプルのworking構造を作成しています。
globを利用してファイル名一覧を取得する
サンプルソース
サンプルの実装です。globを使ってファイルの一覧をリストとイテレータで取得する例です。
- 1つ目、2つ目の例では、working以下をワイルドカード*で取得しています。
- 3つ目、4つ目の例では、ワイルドカード**とrecursiveを使い、挙動の違いを確認しています(直下のみを確認するか、再帰的にディレクトリを全て確認するかの違い)
- 5つ目、6つ目の例では、イテレータを取得し、イテレータをlist()でリストにした場合に同じ結果になるかを確認しています。
- 7つ目の例では、ディレクトリ名がsubで始まる場合のみ対象にします。
実行結果
実行結果を確認します。
- 1つ目・2つ目の場合には、working直下のディレクトリを取得できました。
- **を利用する3つ目・4つ目を比較すると、再帰的な指定(recursive=True)によって全てのファイルを取得できました。
- 5つ目・6つ目を見ると、イテレータでも同じ結果が得られていることが分かります。
- 7つ目の例を見ると、ディレクトリ名がsubからはじまる2つのみが得られました。
globとos.pathを利用してファイル名一覧を取得する
globを利用してファイル名の一覧を取得しました。ここでパス操作に関するos.pathを合わせて利用することで、ファイルの処理を更に丁寧に行うことができます。globと正規表現を合わせてやってもいいですが、使いやすい方を使うといいと思います。
os.pathを合わせて利用するサンプルソース
- [1]の例では、ファイル名がtxtで終わるものだけを選択します
- [2]の例では、ディレクトリを除いてファイルのみを選択します
- [3]の例ではファイルのみを選択した上で、直接のファイル名、ファイル名(拡張子除く)、拡張子、を取得します。
実行結果
実行結果になります。
スポンサーリンク
このようなプログラムを使うことで、globでファイル名の一覧を取得しつつ、いろいろなフィルターをかけ、対象のデータだけを処理することができます。大量のデータを順番に処理する場合など、必要に応じて使ってみてくださいね。