Pythonのパス操作はOSモジュールを使う

スポンサーリンク

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モジュールも調べてみてください。

コメント

タイトルとURLをコピーしました