Python

【初心者向け】Pythonのglobを徹底解説!正規表現の書き方も説明

「pythonのglobの使い方がわからなくてつまずいている。参考書にも詳しく載っていない、誰かちゃんと教えて」

本記事ではこのような悩みを解決します。

pythonのglobの使い方は難しく、初心者がつまずきがちなポイントです。しかしglobは使いこなせればかなり便利な関数です。globの使い方を覚えるだけでpythonでのファイル操作が楽になりますよ。

そこで本記事では初心者でもわかるようにglobの使い方を解説します。globの基本的な使い方や実践的な使い方を詳しく説明しているので、ぜひご覧ください。
また、初心者が混乱しがちな正規表現の書き方についてもまとめました。

python初心者の方はぜひこの機会にglobの使い方をマスターしてしまいましょう!

pythonにおけるglobとは

まずは「そもそもglobってなに?」という点を説明します。
なぜこのような関数が必要となるのか、その理由を押さえておきましょう。

globの基本となるところなので、しっかり理解しておくようにしましょう。

globとは何か

globは、pythonのモジュールの1つです。また、globモジュールの中にある同名の関数glob()も指します。

globとは英語で「かたまり」という意味があります。pythonでは、glob関数を使うことで特定のパターンにマッチするファイルを取得することができます。特定のファイルの「かたまり」を取得する、というイメージで覚えておきましょう。思います。

glob関数にファイルのマッチング条件を引数として与えると、その条件にマッチしたファイルを返してくれます。ファイルを取得すると、そのファイルのみを開いて、プログラム内で扱えるようになります。
マッチング条件の書き方については、この記事で詳しく解説していきますよ。

このように、特定条件に従ったファイルを取得するときにglobを使います。

globの実践方法・具体例

ここでは、globの実践方法について解説していきます。

実際にglobを使ったプログラムを作成して、ファイルを取得してみましょう。

さらに、再帰処理を使って、1つの上の階層のファイルを取得する方法も説明してあります。こちらは少し難しいですが、理解しておくと役立ちますよ。

テストファイルの準備

globを使う前にまずは、テスト用のファイルとディレクトリを準備しましょう。

まず、pythonファイルを保存するディレクトリに「test」ディレクトリを作ってください。そしてtestディレクトリの中に、以下の4つのファイルを作成します。

aaa.txt
bbb.txt
ccc.txt
ddd.text

さらに、testディレクトリの中に「test2」ディレクトリを作ってください。そしてtest2ディレクトリの中に「eee.txt」ファイルを作成します。

なお、ファイルの中身は空っぽで構いません。

作成例がこちらです。

これでglobを使う準備は完了しました。

これからglobを使って、作成したファイルを取得していきます。

globの基本的な使い方

それではglobの基本的な使い方をご紹介します。

まずは「test」ディレクトリの中にあるファイルを取得していきます。
pythonファイルを作成し、次のようなソースを記述してください。

import glob
import re
import os

file = glob.glob(‘test/*.txt’)

print(file)

◯実行結果

Documents $ 1python test.py
[’test/ccc.txt’,’test/bbb.txt’,’test/aaa.txt’]/strong>
Documents $ 1

glob関数を使うためには、globモジュールを始めとして、いくつかのライブラリをimportする必要があります。冒頭のimport文のところは忘れずに記入しましょう。

記述したらファイルを保存して、プログラムを実行してみましょう。すると実行結果のように表示されるはずです。testディレクトリの中にある3つの.txtファイルが出力されました。

このプログラムでは、glob関数の引数として文字列「test/*.txt」を渡しています。これは、「testディレクトリの中にある「*.txt」というパターンに一致するファイルを取得する」という意味になります。

「*」はワイルドカード文字と呼ばれるもので「任意の文字列」を表します。結局、上記の場合、「testディレクトリの中にある拡張子.txtのファイルを取得」していることになります。ここでは、aaa.txt、bbb.txt、ccc.txtの3つがパターンに一致することになりますね。

「ddd.text」はこのパターンに合致していないので、ここでは表示されません。ddd.textを取得したい場合には次のように記述する必要があります。

import glob
import re
import os

file = glob.glob(‘test/*.text’)

print(file)

◯実行結果

Documents $ 1python test.py
[’test/ddd.text’]
Documents $ 1

すると今度は「ddd.text」のみが取得できるようになりました。

パターンの内容をglob関数内に書いて、そのパターンに一致するファイルを取得してくる。これがglobの基本的な使い方です。

ファイル名のみ取得する

先ほどの例ではファイル名と一緒にディレクトリ名も取得していました。ではファイル名のみを取得したい場合はどうすればよいでしょうか?

その場合は、os.path.split関数を使って、ディレクトリ名とファイル名を分けるのがオススメのやり方です。
os.path.split関数は、ファイルのパスを与えるとディレクトリ名とファイル名に分割してくれる関数です。

次の例を見てください。

import glob
import re
import os

file = glob.glob(‘test/*.txt’)

print(os.path.split(f)[1])

◯実行結果

Documents $ 1python test.py
[’test/ddd.text’]
Documents $ 1

このように、os.path.split(ファイルを格納した変数名)[1]と記述することでファイル名のみを取得できます。

なお、os.path.split(f)[0]と記述するとディレクトリ名のみを取得できます。

この方法ならファイル名だけを出力させることができます。実際のコーディングではよく使うので覚えておきましょう。

正規表現について

先ほど、glob関数の引数に「test/*.txt」を渡しましたよね。

ここでの「*」は正規表現と呼ばれる書き方の1つです。正規表現とは、文字列のパターンを表現する表記法のことであり、glob関数内でも使うことができます。

たとえば「*」は「文字列が0回以上繰り返される」パターンに合致します。

正規表現には他にもたくさんの書き方があります。
たとえば「^」は行の先頭を意味する正規表現です。「^a」と書くと、これは「行の先頭がaから始まる」パターンに合致します。
他にも「$」というものがあり、こちらは行の末尾を意味する正規表現です。「t$」と書くと、これは「行の末尾がtで終わる」パターンに合致します。

正規表現は他にもたくさんの種類があります。代表的な正規表現を下にまとめました。

◯代表的な正規表現の例

正規表現 意味 使用例
* 何かしらの文字列が0回以上繰り返される *.txt
+ 何らかの文字列が1回以上繰り返される +.txt
? 何らかの文字が0回もしくは1回表示される ?.txt
{a} 何らかの文字列がa回繰り返される {3}.txt
{a,b} 何らかの文字列がa~b回繰り返される {1,3}.txt
^ 行の先頭 ^a
$ 行の末尾 t$

初心者の方は全部を一気に覚える必要はありません。pythonを勉強していく中で、必要に応じて少しずつ覚えていくようにしましょう。

1つの上の階層のファイルを取得する

pythonはバージョン3.5から「**」という正規表現が使えるようになりました。
「**」とglobを組み合わせることによって、1つの上の階層のファイルも簡単に取得ができます。

「*」だと同一階層のファイルしか取得ができません。今の例で言えば、testディレクトリのファイルは取得できても、test2ディレクトリのファイルは取得できないのです。

以下では、「**」を使ってtest2ディレクトリにある「eee.txt」を取得していきます。pythonファイルに次のように記述してください。

import glob
import re
import os

file = print(glob.glob(‘test/**/*.txt’, recursive=True))

print(file)

◯実行結果

Documents $ 1python test.py
[’test/ccc.txt’,test/bbb.txt’,’test/test2/eee.txt’]
None

Documents $ 1

print(file)

ここで、glob関数の第2引数に「recursive=True」と記述する必要があることに注意してください。
recursiveとは英語で「再帰的」という意味です。「recursive=True」と記述することで、ファイルを再帰的に探すことができるようになります。再帰処理とは、自分自身を呼び出す処理という意味です。

上記の例では「test/**/*.txt」というパターンに合致したファイルを取得しています。「**」を使うことで、testディレクトリの中のファイルとtest2ディレクトリの中のファイルの両方を取得できるようにしています。

このように、「**」を使うことで同一階層以外のファイルも探すことが可能です。この書き方が必要となることもあるので、覚えておくと良いですよ。

まとめ

本記事ではpythonのglobについて解説しました。
globを使うことでファイルの取得が簡単に行えることがお分かりいただけたでしょうか?

また、本記事では正規表現の書き方についても説明しました。
正規表現はpythonのみならず他のプログラミング言語でも使われるものです。最初のうちは慣れないと思いますが、慣れてくるととても便利になります。

ぜひ本記事を参考にしてglobの使い方や正規表現をマスターしましょう。

本記事が初心者の方がpythonを理解する助けになれば幸いです。

プログラミングの家庭教師『Tech Teacher』


引用元:Tech Teacher

「スクールに通い続ける自信がない…」
「時間がなくてスクールに通えない…」

そんな方にはプログラミングの家庭教師『Tech Teacher』がおすすめです。
Tech Teacherはマンツーマン指導なので、生徒様一人ひとりに最適な指導を行うことができます。また、オンライン指導も可能なので、全国どこにいても家庭教師の授業を受けることができます。

Tech Teacherの3つの特徴


生徒様に最適化されたマンツーマン指導
完全マンツーマンの指導なので、生徒様の目的・学習状況・ご要望に合わせて、最適な指導をご提供いたします。

指導力・人柄・相性の優れた教師のご紹介
Tech Teacherには採用率20%の選考を突破した、指導力の高い教師が在籍しています。また、選考では指導力だけではなく人柄も重視しております。

1,000人の教師が在籍!幅広い指導に対応可能
業界トップレベルの1,000人の教師が在籍しています。そのため、幅広い言語・ツール・目的に対応することができます。

家庭教師ならではの5つの魅力


オーダーメイドのカリキュラム
生徒様一人ひとりに習熟度・目的・期間に応じて最適なカリキュラムを提供いたします。

きめ細やかなフォローが可能
生徒様からのご要望にきめ細やかに対応し、学習計画や勉強法などの指導もできるので、普段の勉強も捗ります。

習い事・学業・お仕事との両立が簡単
教室に通う必要がないので親御様の送迎も不要です。授業時間・頻度を生徒様のご都合に合わせて自由に調節することができます。

自分のペースで進められる
生徒様の理解度や意欲に応じて授業のスピードを調節できます。不明点や疑問点は都度立ち止まって解消できるので、着実に理解して進むことができます。

すぐ質問できるから挫折しない
先生を独り占めできるので、周りの目を気にすることなく分からないところをいつでも質問できます。

Tech Teacherへのお問い合わせ

無料体験授業・資料請求のお問い合わせはこちらから

質問のみのお問い合わせも受け付けております。