概要
Python標準パッケージのosモジュールを使用して特定のファイルの存在有無や、実行ファイルの絶対パスの確認等を実行します。
open関数のようなファイルを読み込むツールを使用した時、ファイルをしっかり読み込みたい時に活用できる操作です。
実行環境 |
---|
Windows Subsystem for Linux 2 |
Python 3.7.0 |
例えば、開発環境と本番環境では読み込もうとするファイルの位置が変わってしまったりして、特定のファイルを読み込む事ができないといった事があります。
その際に、異なる環境下であってもファイルの有無を確認する処理を行うには「os.path.isfile」でファイル名を指定します。
# file_path.py
import os
file_name = 'file_1.txt'
if os.path.isfile(file_name):
print("有り")
else:
print("無し")
# 無し
「os.path.isfile」の戻り値はブール値です。
特定のファイルの位置(パス)を確認したい場合は「os.path.abspath」にファイル名を指定します。
実行しているPythonファイル自身の絶対パスを確認したい場合は「__file__」を指定します。
# file_path.py
import os
print(os.path.abspath('file_1.txt')
# /mnt/c/Users/Documents/file_1.txt
print(os.path.abspath(__file__))
# /mnt/c/Users/Documents/file_path.py
「os.path.abspath」に指定したファイル名は存在しなくても、指定したファイル名を加えた絶対パスを返します。
実行しているファイルのディレクトリや特定のファイルのディレクトリを取得したい場合はos.path.dirnameを使用します。
# file_path.py
import os
print(os.path.dirname('file_1.txt'))
#
print(os.path.dirname(__file__))
# .
ファイル名のみ渡した場合は何も取得できませんが相対パスや絶対パスを渡した場合は最下層のディレクトリ名を取得します。
絶対パスとして取得したい場合は、「os.path.abspath」と組み合わせると取得できます。
# file_path.py
import os
file_1 = os.path.abspath('file_1.txt')
print(os.path.dirname(file_1))
# /mnt/c/Users/Documents
my_file = os.path.abspath(__file__)
print(os.path.dirname(my_file))
# /mnt/c/Users/Documents
「os.getcwd」を使用すると、実行しているディレクトリ名までの絶対パスを取得することができます。
# file_path.py
import os
print(os.getcwd())
# /mnt/c/Users/Documents
「os.path.join」では第一引数と第二引数に指定した値を結合したパスとして取得することができます。
# file_path.py
import os
print(os.path.join('dirname1', 'dirname2'))
# dirname1/dirname2
print(os.path.join('dirname1', 'file_1.txt'))
# dirname1/file_1.txt
特定のディレクトリに存在するファイルをopen関数のようなツールに読み込ませたい時に使用できます。
この記事で現れたモジュールを使って実装してみると以下のような処理を行えます。
# file_path.py
import os
file_name = 'file_1.txt'
if not os.path.isfile(file_name):
abs_path = os.getcwd()
file_name = os.path.join(abs_path, 'file_1.txt')
with open('file_name', 'r') as f:
file_data = f.read()
上記の処理内容は、ローカル環境での「file_1.txt」の位置と本番環境(パッケージ等)での「file_1.txt」の位置がopen関数を使う際に異なってしまうパスを渡したい場合に使います。
もちろん「file_1.txt」が存在していなければopen関数でエラーとなるでしょう。
それでは以上となります。
最後までご覧いただきありがとうございました。