Pythonでファイルやフォルダのパス操作で使われるOSモジュール
Pythonの標準ライブラリでもあり、ファイルやフォルダを操作するときは必ずと言っていいほど使用します。そこで今回は、個人的によく使用するOSモジュールを使った処理を紹介したいと思います。
osモジュールを使用するときは必ずimport osでosモジュールをインポートする必要があります。
カレントディレクトリを取得したい os.getcwd()
os.getcwd()でカレントディレクトリを絶対パス形式で取得できます。
例としてc:\pythonで実行した場合は以下になります。
import os
path = os.getcwd()
(実行結果)
c:\python
パスを結合したい os.path.join()
Pythonでのパス結合は、os.path.join()を使います。カッコ内に指定した引数を順番に結合していきます。よくあるパターンでカレントディレクトリに新しいフォルダを作成するときなどに使います。
import os
path = os.getcwd()
path2 = 'test'
print(os.path.join(path,path2))
(実行結果)
c:\python\test
区切り文字の\は、os.path.joinが自動で付与してくれます。
リストのパスを結合する
リストを結合してパスを結合したいときは、アスタリスク*を付与する必要があります。
import os
lstpath = ["c:\python", "test"]
path = os.path.join(*lstpath)
print(path)
(実行結果)
c:\python\test
フォルダパスとファイル名に分割したい
os.path.split()で分割
フォルダパスとファイル名に分割したいときは、いろいろ方法があります。
一つ目はos.path.split()で分割する方法です。
import os
path = r'c:\python\test\test.xlsx'
headpath,tailpath = os.path.split(path)
print(headpath,tailpath)
(実行結果)
c:\python\test test.xlsx
os.path.dirname()とbasename()で分割
os.path.dirname(path)でファイル名を除いたフォルダパスを取得
os.path.basename(path)ファイル名を取得
という方法で分割することも可能です。
import os
path = r'c:\python\test\test.xlsx'
tailpath = os.path.dirname(path)
headpath = os.path.basename(path)
print(headpath,tailpath)
(実行結果)
c:\python\test test.xlsx
絶対パスを取得したい os.path.abspath()
引数に指定した相対パスから絶対パスを取得することができます。
例では、カレントディレクトリがc:\pythonの状態で相対パスから絶対パスを求めています。
import os
#相対パス
path = r'.\test\test.txt'
print(os.getcwd())
print(os.path.abspath(path))
(実行結果)
c:\python
c:\python\test\test.txt
パスの存在を確認したい os.path.exists()
バッチ処理などをやっているときによく使う指定したパスが存在しているかを確認したい場合は、os.path.exists()を使います。フォルダの新規フォルダ作成などの処理時によく使います。
import os
path = r'c:\python\test'
if os.path.exists(path):
print('EXIST')
else:
print('NOT EXIST')
(存在する場合の実行結果) EXIST (存在しない場合の実行結果) NOT EXIST
指定したパス直下の一覧を取得したい os.listdir()
指定フォルダ配下のファイル一覧を取得することもよくあります。batでいうとdirコマンドが該当します。os.listdir()を使うと指定のフォルダ内のファイル一覧をリスト形式で取得できます。
import os
path = r'c:\python\test'
list = os.listdir(path)
print(list)
(実行結果) ['aaaa.txt', 'test.xlsx', 'test2']
フォルダかファイルか判別したい
指定したパスがフォルダなのかファイルなのか判別する場合は以下となります。
判別したい内容 | 関数 | 戻り値 |
---|---|---|
フォルダかどうか判別したい場合 | os.path.isdir(path) | フォルダの場合はTrue,それ以外はFalse |
ファイルかどうか判別したい | os.path.isfile(path) | ファイルの場合はTrue,それ以外はFalse |
使い方は以下のようになります。
import os
#フォルダの場合
path = r'c:\python\test'
print(os.path.isdir(path))
print(os.path.isfile(path))
#ファイルの場合
path2 = r'c:\python\test\test.xlsx'
print(os.path.isdir(path2))
print(os.path.isfile(path2))
(実行結果)
True
False
False
True
パスの拡張子を取得したい os.path.splitext()
指定したパスがファイルの場合に、拡張子によって処理内容を変えたいケースがあります。こういう場合はos.path.splitext(path)を使うと指定したバスの拡張子の手前までと拡張子のタプルを返却してくれます。
import os
path = r'c:\python\test\test.xlsx'
root,ext = os.path.splitext(path)
print(root,ext)
(実行結果)
c:\python\test\test .xlsx
フォルダを作成したい os.makedirs()
フォルダの作成もosモジュールで作成できます。
新規でフォルダを作成する際のポイントは、以下です。
- 指定したパスの中間ディレクトリが存在しない場合は自動で作成してくれる。
- 作成するフォルダが存在している場合はFileExistsErrorが発生する。
こういう場合は上述したos.path.isdir(path)を組み合わせて使うことが多いです。
import os
path = r'c:\python\test2'
#フォルダが存在しない場合のみ作成する
if not os.path.isdir(path):
os.makedirs(path)
print('make folder')
else:
print('already exist folder')
まとめ
osモジュールでよく使う関数をまとめると
用途 | 関数 |
---|---|
カレントディレクトリの取得 | os.getcwd() |
パスの結合 | os.path.join() リストを結合するときは*を付与する |
フォルダパスとファイル名に分割 | os.path.split() os.path.dirname(path)とos.path.filename(path)でも可 |
絶対パスを取得 | os.path.abspath() |
指定したパス直下の一覧を取得 | os.listdir() |
フォルダかファイルか判別 | os.path.isdir(path) //フォルダ os.path.isfile(path) //ファイル |
パスの拡張子を取得 | os.path.splitext() |
フォルダを作成 | os.makedirs() |
今回はosモジュールに限定して紹介しましたが、osモジュール以外にもフォルダの移動やコピー削除ができるshutilモジュールも一緒に使われることがあります。興味のある方はshutilモジュールも調べてみてください。
コメント