[Python]globでのファイル一覧取得の方法とは?基本的な使い方や応用的な使い方を紹介
- システム
エンジニア - globを使って特定のファイルを取得したいのですが、どんな方法がありますか?
- プロジェクト
マネージャー - 特定のファイルや拡張子を取得する方法がありますので、実際にソースを見ながら理解を深めていきましょう。
[Python]globでのファイル一覧取得の方法とは?
今回は、Pythonでのglobを使ったファイル一覧取得方法について説明します。基本的な使い方から、ソート方法やファイル名のみの取得方法などを紹介します。
Pythonでのglobを使ったファイル一覧取得方法に興味のある方は、ぜひご覧ください。
基本的な使い方
Pythonでのglobの基本的な使い方を紹介します。事前に、dir/test1.txtを作成しておいてください。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
|
import glob
# ファイルを取得
file = glob.glob('dir/test1.txt')
print(file)
|
実行結果は以下のようになります。
1
|
['dir/test1.txt']
|
指定したファイルが取得できていることが分かります。
ワイルドカード
ワイルドカードで取得する方法を紹介します。
以下のようなフォルダ構成になっているとします。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
~$ find dir/ | sort
dir/
dir/test1.py
dir/test1.txt
dir/test2.py
dir/test2.txt
dir/test3.py
dir/test3.txt
dir/test4.py
dir/test4.txt
dir/test5.py
dir/test5.txt
~$
|
実際のソースコードを見てみましょう。
1
2
3
4
5
6
|
import glob
# ファイルを取得
file = glob.glob('dir/*.txt')
print(file)
|
実行結果は以下のようになります。
1
|
['dir/test5.txt', 'dir/test3.txt', 'dir/test4.txt', 'dir/test2.txt', 'dir/test1.txt']
|
このようにPythonでは、globにてワイルドカードでファイル一覧を取得できます。
ソート
globでファイル一覧を取得した場合、意図した順番で取得できない場合があります。natsortを使用すれば、取得結果をソートできます。
まずはnatsortをインストールします。
1
|
~$ pip install natsort
|
それでは、実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
|
import glob
from natsort import natsorted
# ファイルを取得
file = glob.glob('dir/*.txt')
print(file)
# ファイル名をソート
file = natsorted(file)
print(file)
|
実行結果は以下のようになります。
1
2
|
['dir/test5.txt', 'dir/test3.txt', 'dir/test4.txt', 'dir/test2.txt', 'dir/test1.txt']
['dir/test1.txt', 'dir/test2.txt', 'dir/test3.txt', 'dir/test4.txt', 'dir/test5.txt']
|
このようにPythonでは、natsortを使用すればglobの取得結果をソートできます。
再帰的
再帰的にファイル一覧を取得する方法を紹介します。以下のようなフォルダ構成になっているとします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
~$ find dir/ | sort
dir/
dir/sub1
dir/sub1/sub2
dir/sub1/sub2/test1.py
dir/sub1/sub2/test1.txt
dir/sub1/sub2/test2.py
dir/sub1/sub2/test2.txt
dir/sub1/sub2/test3.py
dir/sub1/sub2/test3.txt
dir/sub1/sub2/test4.py
dir/sub1/sub2/test4.txt
dir/sub1/sub2/test5.py
dir/sub1/sub2/test5.txt
dir/sub1/test1.py
dir/sub1/test1.txt
dir/sub1/test2.py
dir/sub1/test2.txt
dir/sub1/test3.py
dir/sub1/test3.txt
dir/sub1/test4.py
dir/sub1/test4.txt
dir/sub1/test5.py
dir/sub1/test5.txt
dir/test1.py
dir/test1.txt
dir/test2.py
dir/test2.txt
dir/test3.py
dir/test3.txt
dir/test4.py
dir/test4.txt
dir/test5.py
dir/test5.txt
~$
|
「recursive=True」を指定することで、再帰的に取得できます。それでは、実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
|
import glob
from natsort import natsorted
# ファイルを取得してソート
file = natsorted(glob.glob('dir/**/*.txt', recursive=True))
print(file)
|
実行結果は以下のようになります。
1
|
['dir/sub1/sub2/test1.txt', 'dir/sub1/sub2/test2.txt', 'dir/sub1/sub2/test3.txt', 'dir/sub1/sub2/test4.txt', 'dir/sub1/sub2/test5.txt', 'dir/sub1/test1.txt', 'dir/sub1/test2.txt', 'dir/sub1/test3.txt', 'dir/sub1/test4.txt', 'dir/sub1/test5.txt', 'dir/test1.txt', 'dir/test2.txt', 'dir/test3.txt', 'dir/test4.txt', 'dir/test5.txt']
|
このようにPythonでは、globで再帰的にファイル一覧を取得できます。
正規表現での取得
正規表現でファイル一覧を取得する方法を紹介します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
|
import glob
from natsort import natsorted
# ファイルを取得してソート
file = natsorted(glob.glob('dir/**/[a-z]*1.*', recursive=True))
print(file)
|
実行結果は以下のようになります。
1
|
['dir/sub1/sub2/test1.py', 'dir/sub1/sub2/test1.txt', 'dir/sub1/test1.py', 'dir/sub1/test1.txt', 'dir/test1.py', 'dir/test1.txt']
|
このようにPythonでは、globに正規表現を指定できます。
絶対パス
globの結果から絶対パスを取得する方法を紹介します。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import glob
from natsort import natsorted
from pathlib import Path
# ファイルを取得
file = natsorted(glob.glob('dir/*.txt'))
for i in file:
print(i)
# 絶対パスで取得
for i in file:
p = Path(i)
print(p.resolve())
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
8
9
10
|
dir/test1.txt
dir/test2.txt
dir/test3.txt
dir/test4.txt
dir/test5.txt
/home/ubuntu/dir/test1.txt
/home/ubuntu/dir/test2.txt
/home/ubuntu/dir/test3.txt
/home/ubuntu/dir/test4.txt
/home/ubuntu/dir/test5.txt
|
Pathに変換することで、絶対パスを取得できます。このようにPythonでは、globの結果から絶対パスを取得できます。
ディレクトリ名やファイル名
ディレクトリ名やファイル名のみを取得する方法を紹介します。os.path.splitを使用します。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
|
import glob
from natsort import natsorted
import os
# ファイルを取得
file = natsorted(glob.glob('dir/*.txt'))
for i in file:
print(' パス名:' + i)
print('ディレクトリ名:' + os.path.split(i)[0])
print(' ファイル名:' + os.path.split(i)[1])
print('-'*20)
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
パス名:dir/test1.txt
ディレクトリ名:dir
ファイル名:test1.txt
--------------------
パス名:dir/test2.txt
ディレクトリ名:dir
ファイル名:test2.txt
--------------------
パス名:dir/test3.txt
ディレクトリ名:dir
ファイル名:test3.txt
--------------------
パス名:dir/test4.txt
ディレクトリ名:dir
ファイル名:test4.txt
--------------------
パス名:dir/test5.txt
ディレクトリ名:dir
ファイル名:test5.txt
--------------------
|
このようにPythonでは、ディレクトリ名やファイル名のみを取得できます。
システム
エンジニアファイル以外にディレクトリ名やファイル名のみも取得できるのですね。
プロジェクト
マネージャーflobモジュールでは**であらゆるファイルや、サブディレクトリにマッチして再帰的な処理ができます。
まとめ
いかがでしたでしょうか。Pythonでのglobを使ったファイル一覧取得方法について説明しました。基本的な使い方から、ソート方法やファイル名のみの取得方法などを紹介しました。
ぜひご自身でソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
Python新着案件New Job
-
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円
東京都豊島区(池袋駅)
-
マルチロガーソフト開発/東京都豊島区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円
東京都豊島区(池袋駅)
-
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円
東京都都内(-駅)
-
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円
東京都都内(-駅)
-
商品化予定の振動センサーの運用保守/Python/東京都都内/【WEB面談可】
月給50万~60万円
東京都都内(-駅)
-
商品化予定の振動センサーの可視化UI開発のテスター/Python/東京都都内/【WEB面談可】
月給25万~35万円
東京都都内(-駅)