【Python入門】パスの構築 ディレクトリの操作- Python初心者勉強記019
今回はPython osモジュール・shutilモジュールを使ってパスを構築したり、ディレクトリの操作を行う方法を紹介していきたいと思います。
os.pathモジュール
osモジュールのpathモジュールを使用することで、様々な方法でファイルやディレクトリのパスを構築することができます。
os.pathのインポート
import os.path
パス成分の結合
pathモジュールのjoin関数を用いると、パス成分の結合を行えます。このとき、自動的にOS依存のパスセパレーターを判断してパスを作成してくれます。つまり、Unix上では”/”、windows上では”¥”をセパレータとして使用してくれます。
>>> import os.path
>>> os.path.join('abc','def')
'abc/def'
ディレクトリ名の取得
dirname関数は指定したファイルまたはディレクトリを直下に含むディレクトリ名を取得します。
>>> os.path.dirname("tmp/temp.txt")
'tmp'
ファイル名の取得
basename関数は、指定したパスの末端成分のファイルまたはディレクトリ名を取得します。
>>> os.path.basename("tmp/temp.txt")
'temp.txt'
絶対パスの取得
pathモジュールのabspathメソッドで絶対パスを取得することができます。
>>> os.path.abspath('temp/temp.txt')
'/Users/UserName/Documents/python/temp/temp.txt'
パスの分解
パスを分解するには以下のような、関数を使用します。
パス・セパレーターでパスを分解する⇒split関数
拡張子とそうでない部分に分ける⇒splitext関数
ドライブとそうでない部分に分ける⇒splitdrive関数
>>> os.path.split('temp/temp.txt')
('temp', 'temp.txt')
>>> os.path.splitext('temp/temp.txt')
('temp/temp', '.txt')
ユーザホームディレクトリの展開
expanduser関数は、パスの最初の’~’または’~user’をユーザホームディレクトリに置換します。
>>> os.path.expanduser("~/temp")
'/Users/ishiihidenori/temp'
パスの共通部分の取得
commonprefix関数は、複数のパスにおいて、行頭からの最長共通成分を取得します。
>>> os.path.commonprefix(["abc/def","abc"])
'abc'
ファイルシステムの操作
osモジュールやshutilモジュールを使用することによって、ファイルシステム上の様々な操作を行うことができます。
import os
import shutil
ファイル・ディレクトリの存在チェック
ファイルやディレクトリ、リンクなどの存在をチェックするには、os.pathモジュールの以下の関数を使用します。
何かしら存在するかどうか ⇒exists関数
ディレクトリかどうか ⇒ isdir関数
ファイルかどうか ⇒ isfile関数
リンクかどうか ⇒ islink関数
>>> os.path.exists('temp/temp.txt')
True
>>> os.path.isdir('temp/temp.txt')
False
>>> os.path.isfile('temp/temp.txt')
True
>>> os.path.islink('temp/temp.txt')
False
ファイルの削除
osモジュールのremove関数を使うことで、ファイルの削除を行うことができます。
指定したものがフォルダであった場合はエラーになります。
ディレクトリの作成
osモジュールのmkdir関数は、指定のディレクトリを作成します。すでにディレクトリが存在する場合はエラーになります。
makedirs関数を使うことで、指定したパス全てのパス成分のディレクトリを作成することもできます。
>>> os.makedirs('temp/temp1/temp2') #tempの中にtemp1、その中にtemp2がつくられる。
ディレクトリの削除
osモジュールのrmdir関数は、指定のディレクトリを削除することができます。ただし、削除するディレクトリは空のディレクトリでなくてはなりません。
osモジュールのremovedirs関数は、指定したパスの全てのディレクトリを末尾から削除していきます。しかし、末尾のディレクトリが空でない場合はエラーとなり、途中のパス成分のディレクトリは空でないものになるまで削除します。
shutilモジュールのrmtree関数は指定されたディレクトリを、内部のファイル・ディレクトリ含めて全て削除します。
>>> os.rmdir('temp/temp1/temp2')
>>> os.makedirs('temp/temp1/temp2')
>>> os.removedirs('temp/temp1/temp2')
>>> os.makedirs('temp/temp1/temp2')
>>> shutil.rmtree('temp/temp1')
Python入門講座の次の記事はこちら => 【Python入門】ファイルのコピー ディレクトリの操作- Python初心者勉強記020