Pythonでファイルを取り扱うのに便利なos.pathモジュールを解説します。この記事は
os.path --- 共通のパス名操作 — Python 3.8.1 ドキュメントを参考に作成しました。
目次
os.pathモジュールを使ってファイルやフォルダを取り扱う
os.pathモジュールはファイルやフォルダを取り扱うためのPython標準ライブラリの為、インストールせずにすぐに使う事ができます。日常でよく使う4つの関数についてみていきます。ディレクトリとフォルダは同じ意味です。フォルダはウィンドウズOSでよく使う言い方です。
os.path.join()で区切り文字を補完してパスを作成する
公式ドキュメントの記述は下記の通りです。
1 つあるいはそれ以上のパスの要素を賢く結合します。戻り値は path、ディレクトリの区切り文字 (os.sep) を *paths の各パートの(末尾でない場合の空文字列を除いて)頭に付けたもの、これらの結合になります。<以下、略。Python3.8.1ドキュメントより>
要するに、適切にフォルダの名前をつなげて、パスとして適切な文字列を作ってくれると言う事です。OSによってフォルダ間の区切り文字が「\」や「¥」、「/」だったりするので、実行環境に応じて適切につなげてくれます。
os.path.join()の具体例
import os path = os.path.join('spam', 'bacon', 'ham') print(path) # spam\bacon\ham
os.path.join()の注意点
Cドライブ直下にsampleというディレクトリ(フォルダと同じ意味)があったとして、そのパスを取得しようとして失敗する例を紹介します。
import os path = os.path.join('C:', 'sample') print(path) # 「C:sample」が戻ってしまい、失敗
このように「C:」などのドライブレターが含まれている場合、「\」がうまく挿入できていません。ドライブレターを含む絶対パスを取得するときはエスケープ文字を考慮して「\\」を使います。
import os path = os.path.join('C:', '\\sample') print(path) #「C:\sample」が取得できた
os.path.dirname()でディレクトリ名を取得する
次にディレクトリ名を取得する方法です。簡単にディレクトリ名を取得することができます。
os.path.dirname()の具体例
import os path = 'C:\\sample\\sample_file.txt' print(os.path.dirname(path))
ファイル名の部分が取り除かれて、ディレクトリの名前だけを取得することができました。
os.path.basename()
次に、ファイル名を取得してみます。
os.path.basename()の具体例
import os path = 'C:\\sample\\sample_file.txt' print(os.path.basename(path))
os.path.dirnameの所をos.path.basenameに返るだけでファイル名が取得できました。
.dirnameと.basenameを組み合わせて使う
dirnameとbasenameを組み合わせて実用的なプログラムを書く事ができます。たとえば、あるファイルを加工するときに、元のファイルはそのままに、同じフォルダに別名で加工後のファイルを保存する、と言うような場合です。
import os original_path = 'C:\\sample\\sample_file.txt' dir_path = os.path.dirname(original_path) filename = os.path.basename(original_path) new_path = os.path.join(dir_path, '【処理済み】' + filename) print(new_path)
これで最後のprint(new_path)の所の代わりに保存する処理を記述すれば、同じディレクトリに別名のファイルを保存することができます。
os.pathを使ったファイルの取り扱いまとめ
今回はPythonの標準モジュールであるos.pathをつかってファイルやディレクトリの取り扱いを解説しました。まとめると下記の通りです。
- よく使うos.pathの関数はjoin、dirname、basenameの3つ
- joinはドライブレターがある場合は要注意
- dirnameでディレクトリのパスを取得できる
- basenameでファイル名を取得できる
- 組み合わせることで柔軟にファイル名を変えて保存することなどができる
より堅牢なプログラムにする為に、指定したフルパスのファイルが存在するかどうかを確認するような関数もあります。そういった関数も組み合わせてより堅牢なプログラムを作成していきましょう。