皆さんこんにちは!Kotonoです。
Pythonではファイル・ディレクトリを操作するさまざまな方法が用意されています。
「ディレクトリを作成するにはどうすればいいの?」
「ファイルやディレクトリを削除するにはどうすればいいの?」
「ファイルやディレクトリの名称や更新日付などを確認するにはどうすればいいの?」
「ファイルの一覧を取得するにはどうすればいいの?」
「複数のファイルを検索するにはどうすればいいの?」
今回はPythonの基本的なファイルやディレクトリの操作について、やさしく解説していきたいと思います。
ファイルやディレクトリなどを扱うテクニックをいくつか覚えていると、プログラミングの幅も広がりますよ!
この記事では
【実践】osモジュールの使い方について
【実践】globモジュールの使い方について
などについて、わかりやすく解説していきたいと思います。
この記事の目次
ファイルやディレクトリを扱うには
まずはPythonでファイルやディレクトリを扱う基本について抑えておきましょう。
疑問に思っている方もいるかもしれませんが、ディレクトリとはフォルダと同じ意味として捉えても問題はありません。
Pythonでは基本的なファイルやディレクトリの操作はosモジュールで、正規表現のような記述を使ったパス名の指定をglobモジュールで行います。
globモジュールの操作はosモジュールと組み合わせると便利なので、まずはosモジュールについてを解説していきます。
osモジュールの使い方
osモジュールとは、その名の通りOS(オペレーションシステム)に関する操作をするための機能が組み込まれている標準モジュールです。
osモジュールを使うと、ファイルやディレクトリの操作を行う事が出来ます。
まずは、osモジュールを使用するにはモジュールそのものをインポートする必要があります。
このようにosモジュールをインポートしてみましょう。
これで、「os.(関数名)」でosモジュールの機能にアクセスすることが出来るようになります。
これ以降のコードはインポートしたものとして、import osの一行は省略します。
またこれらの操作についてよくわからない方は、こちらの記事もご覧ください。
ディレクトリを作成する
では実際にosモジュールの機能を使ってみましょう。
まずは、ディレクトリを作成してみましょう。
こちらのサンプルコードを見てください。
このサンプルコードでは、mkdir関数を使って新しいディレクトリを作成しました。
「.」は今現在いるディレクトリのことを表しています。
また、osモジュールのgetcwd関数で、現在のディレクトリの場所を確認することが出来ます。
実行結果
この場合、先程のtestディレクトリはProjectsディレクトリ内に作成されることとなります。
ファイルやディレクトリを削除する
removeでファイルを削除
ディレクトリの中にあるファイルを削除するにはremove関数を使います。
現在のディレクトリには「myfile.txt」があると仮定して、こちらのサンプルコードを見てみましょう。
実行結果
このサンプルコードでは、myfileという.txtファイルを削除しました。
remove関数は、引数に削除したいファイルのパスを指定します。
ちゃんと削除されているかどうかは、exists関数の戻り値で確認することが出来ます。
exists関数は引数に指定されたパスが存在すればTrueを、存在しなければFalseを返します。
rmdirでディレクトリを削除
ディレクトリを削除したい場合はrmdir関数を使います。
実行結果
rmdir関数はremove関数と同じように、引数に削除したいディレクトリのパスを与えます。
実際、exists関数の戻り値はFalseと表示されました。
ファイルとディレクトリでは、削除をするために使う関数が違うことに気をつけましょう!
また、ディレクトリになにも入っていない場合はremdir関数でファイルを削除できますが、1つでもファイルが存在していた場合エラーが発生し、削除できません。
たとえば、test1というディレクトリにmyfile.txtが存在していた場合以下のエラーが発生します。
これは、test1が空ではないですよというエラーです。
shutil.rmtreeでディレクトリをファイルごと削除
ディレクトリをファイルごとすべて削除するには、rmdirではなく、shutilモジュールのrmtree関数を使います。
実行結果
shutilモジュールのrmtree関数で中身のあるディレクトリを削除できました。
rmtree関数はファイルのあるなしに関わらずディレクトリを削除します。
ファイルやディレクトリの名前を取得する
次にファイルやディレクトリの名前を取得する方法を解説します。
こちらのサンプルコードを見てみましょう。
実行結果
こちらのサンプルコードでは、ファイル名とディレクトリ名を順に表示させてみました。
ファイル名にはos.path.basenameを、ディレクトリ名にはos.path.dirnameを使いました。
どちらの関数も、引数にはパスを指定します。
ファイルが作成された日付を確認する
- ・ファイルが作成された日付
・最後にファイルが修正された日付
・最後にファイルが使用された日付
・最後にファイルのメタデータに変更があった日付
・ファイルサイズ
などのファイルのメタデータもosモジュールと、timeモジュールを組み合わせること取得できます。
こちらのサンプルコードを見てみましょう。
実行結果
__file__はPython組み込みの変数で、現在のファイルのパスを意味しています。
また、timeのctime関数はUnix時間を、コンピューターのローカルの時間に整形してくれる便利な関数です。
Unix時間とは1970年の1月1日から何秒経過したかによって、時間を表現しているものです。
たとえば、os.path.getatime関数などはUnix時間を返すので、time.ctime関数で再度、変換しました。
ファイルかディレクトリか確かめる
あるパスがファイルか、ディレクトリなのかを確かめるためにはisfileとisdir関数を使います。
これらのisで始まる関数はTrueかFalseを返します。
こちらのサンプルコードを見てみましょう。
実行結果
__file__は現在のファイルを返すのでTrueを返し、isdir関数の場合、ファイルはディレクトリではないのでFalseを返しています。
ディレクトリ下のファイル一覧を取得
たとえば、testというディレクトリに、test1.py、test2.py、test3.pyというファイルがある仮定します。
testのディレクトリにあるファイル一覧を出力したい場合は、os.listdir関数を使います。
こちらのサンプルコードを見てみましょう。
実行結果
このように、lisdir関数はlistとして、ディレクトリ下にあるファイル名を取得します。
ちゃんと、test1.py、test2.py、test3.pyが取得できていますね。
ファイルの拡張子を取得する
ファイルがどんな種類のものかを知りたいときには、その拡張子を確認しましょう。
拡張子は、splitext関数を使って取得できます。
こちらのサンプルコードを見てみましょう。
実行結果
pythonのコードを実行したファイルの拡張子はもちろん.pyですよね。
splitext関数は、リストとして、パスの拡張子より左側と拡張子を返します。
なので、拡張子自体を使用したい場合はsep_path[1]のように、1番目の要素を指定します。
globモジュールの使い方
ここからはglobモジュールについて解説します。
globモジュールは、ファイルやディレクトリを操作するときにとても便利な、
・ワイルドカードパターンマッチング
・正規表現
を使うことが出来ます。
これらについて詳しく見ていきましょう。
ワイルドカードを使ってファイルを検索する
ワイルドカードとは、検索などを行うときに使う特殊文字の一つです。
主にアスタリスク(*)が用いられます。
アスタリスク(*)は0文字以上の任意の文字列を指定します。
testというディレクトリの中に、様々な名前のテキストファイル(.txtファイル)があると仮定して、こちらのサンプルコードを見てみましょう。
実行結果
サンプルコードではまず、globモジュールをインポートしています。
そしてglob関数を使って「test」ディレクトリ内の全ての「.txtファイル」のパス名を表示させました。
「*.txt」という構文は、ディレクトリにある「.txtファイル」すべてという意味になります。
正規表現を使ってファイルを検索する
次はもう少し高度なファイルの検索をしてみましょう。
これには正規表現というテクニックを使います。
この正規表現こそが、globモジュールを使う上での大きな特徴となります。
正規表現については、これらの記事を見てみると理解がより深まりますよ!
こちらのサンプルコードを見てみましょう。
glob関数の引数に渡した文字列が、正規表現になります。
実行結果
正規表現の意味はわかったでしょうか。
正規表現はいろいろな文字列を一つの形式で表す表現方法になります。
この正規表現では、「(数字ファイル名).すべての拡張子」のファイルを現在のディレクトリから探しています。
他にもこのような使い方をすることが出来ます。
実行結果
この場合は、どのような名前でも良いファイルを、再帰的に探してリストを返しています。
正規表現はとても奥が深いものですが、使いこなすととても自由に文字列を検索することが出来るようになります。
まとめ
今回は、Pythonの基本的なファイルやディレクトリの操作を解説しました。
この記事で書いたことをまとめると、
・ファイルやディレクトリの基本的操作はosモジュール
・globモジュールはワイルドカードや正規表現が使えるので、ファイル検索などに便利
になります。
皆さんも、この記事を通してファイルやディレクトリに関する知識をどんどん深めていってくださいね。
Pythonカリキュラム無料公開中!
この記事はPython入門完全攻略ガイド【基礎学習/アプリ開発/仕事獲得】の一部になります。このカリキュラムは、プログラミング入門者が、基礎学習からアプリ開発、さらには仕事獲得まで体系的に学べる内容となっています。Python学習に必要な情報を一つにまとめていますので効率よくPythonを学ぶことが出来ます。この機会に是非活用していただければと思います。
33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーランスをされている市川友哉さん。33歳で、プログラミングを学び始め、4ヶ月という短い期間でフリーランスエンジニアとして独立までされた学習ログを余すことなくインタビューさせていただきました。プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。
Pythonを最短で習得したい方へ
元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Pythonを独学で習得することができるでしょう。ただし、実際の学習期間中はつまづいている時間がほとんどです。
「なかなかやり遂げられ無い、挫折してしまった」このような悩みを抱えている方も少なく無いと思います。
「時間が足りない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決することができない」
- もう挫折したくない
- 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
- 自分だけのカリキュラムで効率的に勉強したい
お一人お一人に専属のインストラクターがつくので、通常のスクールでは難しい、AI(人工知能)や機械学習、IoTについて学習することできます。
まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?
Pythonならではの学習方法や、現役Pythonエンジニアから貴重なアドバイスを受けることができます。
詳しくは下の画像をクリックして弊社サービス内容をご確認ください。