こんにちは、ぽころーです!
今回は、ファイル操作をするときに、便利な glob の使い方について紹介します!
globとは
globとはglob
モジュールのglob()
関数のことを指します。
そのため、globを使用するときは、glob
モジュールをimport する必要があります。
具体的な使い方はのちほど説明します。
globは、ファイル名を抽出したいときに使用します。
globは英語で「かたまり」という意味があり、
複数のファイル名をまとめて取得することも可能です。
globの使い方
では実際にglobを使ってファイル名を抽出する方法を紹介します。
ディレクトリの準備
まずは、globを使うためにディレクトリを準備します。
以下のディレクトリ構成で、実際に操作したいと思います。
└── testdata
├── test_001.csv
├── test_002.csv
├── test_003.csv
├── test_004.csv
└── test_005.csv
testdata
ディレクトリにテストデータ001から005のcsvファイルを格納します。
ファイルの中身は何も書かれていなくて問題ないです。
globでファイルを抽出する
準備ができたところで、globでファイル名を抽出してきましょう!
実際のコードは以下の通りです
testdata
ディレクトリ内のcsvファイルのファイル名を抽出しています
import glob
file_list = glob.glob('testdata/*.csv')
print(file_list)
実行結果
['testdata/test_001.csv', 'testdata/test_002.csv', 'testdata/test_003.csv', 'testdata/test_004.csv', 'testdata/test_005.csv']
globを使うため、まずはglob
モジュールをimport
します。
そして、glob
モジュールのglob()
関数を呼び出しています。
glob()
関数の引数には、「ファイルの抽出条件」を指定します。
*
は「0文字以上の任意の文字列」という意味があり、
今回の例では、
「testdata
ディレクトリ内のcsvファイルをすべて抽出する」という条件になります
実行結果をみると、
testdata
ディレクトリ内のcsvファイルがすべてリストで取得できていることがわかります
下の階層までファイル検索をする方法
globには、深い階層(サブディレクトリ)まで検索する方法もあります。
testdata
ディレクトリの下にtestdata2
ディレクトリを用意します。
└── testdata
├── test_001.csv
├── test_002.csv
├── test_003.csv
├── test_004.csv
├── test_005.csv
└── testdata2
├── test_011.csv
├── test_012.csv
├── test_013.csv
├── test_014.csv
└── test_015.csv
以下の方法で、globを使ってすべてのcsvファイルを取得します。
file_list = glob.glob('testdata/**/*.csv', recursive=True)
print(file_list)
実行結果
['testdata/test_001.csv', 'testdata/test_002.csv', 'testdata/test_003.csv', 'testdata/test_004.csv', 'testdata/test_005.csv', 'testdata/testdata2/test_011.csv', 'testdata/testdata2/test_012.csv', 'testdata/testdata2/test_013.csv', 'testdata/testdata2/test_014.csv', 'testdata/testdata2/test_015.csv']
testdata2
の中のcsvファイルも取得できました。
引数のパスに**
を追加すことで、testdata
ディレクトリより下の階層まで検索します!
また、第2引数には、recursive=True
を指定します。
まとめ
globはファイル名を抽出したいときによく使います
ワイルドカードなど覚えないといけないこともありますが、
理解してしまえばとても便利です。
glob以外にもPythonには、他にもファイル操作モジュールがあります。
ぜひ他のモジュールもマスターし、ファイル操作に自信をつけていきましょう!