この記事では、pythonを使ってフォルダ内のファイルを様々な条件で一括取得する方法をご紹介します。
具体的には
◆フォルダとファイルをすべて取得
◆フォルダだけ取得
◆ファイルだけ取得
◆指定拡張子だけを取得
という4つの方法をご紹介していきます。
様々な状況で活用できるスキルだと思いますので、ぜひマスターしておきましょう。
必要なライブラリ:globについて
ファイル一覧を取得する方法はいくつかありますが、この記事ではglobというライブラリを使用して実行していきます。
globはpythonをインストールした時点です最初からインストールされているため、python環境さえ準備できているのであれば誰でも使用可能です。
(いわゆる標準ライブラリってやつですね。)
このglobはワイルドカード(*)をつかって条件にあてはまるファイルやフォルダ名を一括取得することができるライブラリです。
※ワイルドカード(*)を簡単に説明すると、どんな文字列でも受け入れろ!という指示のようなものです。例えば *.jpgとすれば最後に.jpgがついているすべてのファイルを取得することができるというものですね。
今回はこのglobをつかって様々な条件でファイルやフォルダの一覧取得を実演してみようと思います。
フォルダ内データを一括取得する方法
それでは早速ですが、以下の4つの条件ごとにフォルダ内データを一括取得する方法をご紹介していきます。
◆フォルダとファイルをすべて取得
◆フォルダだけ取得
◆ファイルだけ取得
◆指定拡張子だけを取得
また、今回は以下に示しているフォルダ内を探索していくことにします。
※チェックが入っているglob.pyが今回実行コードを書いているファイルです。
このファイルが置いてあるフォルダ内を探索するという形でコードを書いていますので、別フォルダを指定した場合はコードを適宜書き換える必要があります。その点はご了承ください。
フォルダ&ファイルをすべて取得
まずはじめにあるフォルダ内にあるすべてのファイルとフォルダを一括取得する方法をご紹介していきます。
さっそくですが、以下がこの場合のサンプルコードです。
◆サンプルコード①
#ライブラリのインポート
import glob
list = glob.glob('*')
for file in list:
print(file)
※最後の2行は取得したファイルを表示されているだけですので、
list = glob.glob(‘*’)
の部分でデータの一覧取得は完了しています。
このコードを実行すると、以下のような結果が出力されました。
探索したフォルダ内は以下のようなデータがはいっているので、きちんとすべてのデータを取得してくれていることがわかります。
(取得したデータはabc順に並んでいるみたいですね。)
◆コードの要点解説
基本的には【list = glob.glob(‘*’)】の部分で条件に該当するデータを取得しています。
今回は条件設定に*だけを指定していますので、
「どんな名前でも良いからとってこい!」
という指示になっているわけです。
これはシンプルでわかりやすいですよね。
これ以降は、この*の部分をちょっと工夫して指定することで、取得するデータの条件を変更することができます。
実際にやってみましょう。
フォルダだけを取得
次はフォルダだけを取得する方法です。
この場合のサンプルコードです。
◆サンプルコード②
#ライブラリのインポート
import glob
list = glob.glob('*/')
for file in list:
print(file)
このコードを実行すると、以下のような結果が出力されました。
きちんとフォルダだけ(拡張子がないもの)が取得されていますね。
◆コードの要点解説
フォルダというのは拡張子がない代わりに階層を表すか【/】という文字が付け加えられます。
【*/】と指定することで、
「最後に【/】がついているデータをとってこい!」
つまり
「フォルダだけをとってこい!」
という指示になるわけです。
ファイルだけを取得
次はファイルだけを取得する方法です。
この場合のサンプルコードです。
◆サンプルコード③
#ライブラリのインポート
import glob
list = glob.glob('*.*')
for file in list:
print(file)
このコードを実行すると、以下のような結果が出力されました。
きちんとファイルだけ(拡張子があるもの)が取得されていますね。
◆コードの要点解説
先ほどのフォルダとは違い、ファイルというのはほぼ必ず拡張子【~~~ . ~~~】という名前になっていると思います。
(たまに . から始まる面倒なやつもいますが、今回は無視します。)
そのため、globで取得する条件を【*.*】と指定することで、
「名前のどこかに【.】がついているデータをとってこい!」
つまり
「ファイルだけをとってこい!」
という指示になるわけです。
※このやり方だと、フォルダだとしても、その名前がtest.testとかゆう名前の場合は残念ながら取得してしまいます。
その場合は他のライブラリと組みあわせる必要がでてきますのでご注意ください。
(まぁフォルダに . をつける人はそうそういないと思いますので、このやり方で多くの場合問題は生じないでしょう。)
指定拡張子だけを取得
最後は指定した拡張子のファイル名だけを取得する方法です。
この場合のサンプルコードです。
※今回はjpgを指定しています。
◆サンプルコード④
#ライブラリのインポート
import glob
list = glob.glob('*.jpg')
for file in list:
print(file)
このコードを実行すると、以下のような結果が出力されました。
ここはもはや説明不要でしょうね。
探索するフォルダを直接指定したい場合
というわけで以上が、フォルダ内のデータを探索する方法でした。
しかし、これらのコードはあくまで実行ファイル(.py)があるフォルダ内を探索するものでした。
別のフォルダを指定して探索したい場合もあるでしょうから、最後にそのやり方もご紹介しておきましょう。
ほとんどやり方はおなじですので、一番最初にご紹介した、フォルダとファイルすべてを一括取得する方法だけをご紹介します。
◆サンプルコード
#ライブラリのインポート
import glob
import os
list = glob.glob('C:/Users/Desktop/study_python/*')
for file in list:
print(os.path.split(file)[1])
こんな感じに変更することで、フルパスで指定したフォルダ内のデータを同じように探索することが可能になります。
状況に応じてぜひご活用ください。
おわりに
というわけで今回はpythonを使ってフォルダ内のデータ名を一括取得する方法をご紹介しました。
知っておくと様々な状況で役に立ちますので、ぜひ覚えておきましょう。
なお、以下の記事では今回紹介したglobに関連するスキルをご紹介しています。
興味があればぜひご覧ください。
【python】globでの取得情報を逆順に並べ替える方法!
このように、私のブログでは様々なプログラミングスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント