毎日ちょっとPython ~ 23日目 ~

きょうはどこからだ。ファイルの読み書きか

dirname() basename()

os.path.dirname(path) - 引数pathの最後のパス区切り記号までの文字列を返す
os.path.basename(path) - 引数pathの最後のパス区切り記号より後ろを返す

C:¥¥windows\System32\calc.exeみたいなものがあった場合、

>>> path = 'C:\\Windows\\System32\\calc.exe'
>>> os.path.basename(path)
'calc.exe'
>>> os.path.dirname(path)
'C:\\Windows\\System32'

同時に取得する場合は、os.path.split()を呼び出せばOK

>>> os.path.split(path)
('C:\\Windows\\System32', 'calc.exe')

os.path.split()は個々のフォルダまで分割はしません。そうしたいのであれば、os.sepを用いて文字列のsplit()メソッドを呼び出します。os.sepにはプログラムを実行しているOSにおけるパス区切り文字が格納されています

>>> path.split(os.sep)
['C:', 'Windows', 'System32', 'calc.exe']

ファイルサイズとフォルダ内容を調べる

特定のファイルやフォルダの情報を集める。os.pathモジュールにはファイルサイズをバイト単位で返す関数や、指定したフォルダの中のファイルとフォルダの一覧をアッ詰める関数があります。

os.path.getsize(path) - 引数pathに指定したファイルのサイズをバイト単位で返す。
os.listdir(path) - 引数pathに指定したフォルダに含まれるファイル名とフォルダ名のリストを返す。(os.pathではなく、osモジュールの関数)

>>> os.path.getsize('C:\\Windows\\System32\\calc.exe')
27648
>>> os.listdir('C:\\Windows\\System32')
>>> なんかめっちゃ出た

合計サイズを求めたいときは、os.path.getsize()とos.listdirを繰り返す感じでコードを書きます。

import os
total_size = 0
for filename in os.listdir('C:\\Windows\\System32'):
   total_size = total_size + os.path.getsize(os.path.join('C:\\Windows\\System32',filename))

print(total_size)

パスを検査する

多くのPythonの関数は、存在しないパスを渡すとエラーになって異常終了します。os.pathモジュールには、パスが存在するかどうか、また、ファイル化フォルダ化を判定する関数があります。

os.path.exists(path) - 引数に指定したファイルやフォルダが存在すればTrue、存在しなければFalseを返す
os.path.isfile(path) - 引数に指定した先が存在し、それがファイルであればTrue、そうでなければFalseを返す
os.path.isdir(path) - 引数に指定した先が存在し、それがフォルダであればTrue、そうでなければFalseを返す

面白い使い方だと、DVD、フラッシュメモリーが接続されているかどうかを判定することもできます。

>>> os.path.exists('D:\\')
True

という事でお時間です。

この記事が気に入ったらサポートをしてみませんか?