Pythonでファイル・ディレクトリの情報を取得(os.stat, pathlib.Path)
この記事では、Pythonのos.stat関数とpathlib.Pathオブジェクトを使用して、ファイルやディレクトリの情報を取得する方法を説明します。ファイルサイズ、最終更新日時、アクセス権など、様々な情報を取得する方法を学びます。
目次
os.stat(): ファイル情報の取得
os.stat()関数は、ファイルやディレクトリの情報を取得するための関数です。引数にはファイルパスを指定します。返り値はstatオブジェクトで、様々な属性が含まれています。
import os
filepath = 'my_file.txt'
stat_info = os.stat(filepath)
print(stat_info)
出力されるstatオブジェクトは、様々な属性(st_size, st_mtime, st_modeなど)を含んでいます。これらの属性は、それぞれファイルサイズ、最終更新時間、ファイルモードなどを表します。
import os
import time
filepath = 'my_file.txt'
stat_info = os.stat(filepath)
print(f"ファイルサイズ: {stat_info.st_size} bytes")
print(f"最終更新時間: {time.ctime(stat_info.st_mtime)}")
上記の例では、ファイルサイズと最終更新時間を取得しています。time.ctime()関数は、数値形式のタイムスタンプを人間が読みやすい形式に変換します。
pathlib.Path.stat(): pathlibによるファイル情報の取得
pathlibモジュールを使用すると、よりオブジェクト指向的な方法でファイル情報を取得できます。Pathオブジェクトのstat()メソッドを使用します。
from pathlib import Path
filepath = Path('my_file.txt')
stat_info = filepath.stat()
print(stat_info)
os.stat()と同様に、様々な属性がstatオブジェクトに格納されています。pathlibを使うことで、コードがより読みやすくなります。
ファイルの種類の判定
os.path.isfile()関数とos.path.isdir()関数は、それぞれファイルとディレクトリかどうかを判定します。
import os
filepath = 'my_file.txt'
if os.path.isfile(filepath):
print(f"{filepath} はファイルです")
else:
print(f"{filepath} はファイルではありません")
import os
dirpath = 'my_directory'
if os.path.isdir(dirpath):
print(f"{dirpath} はディレクトリです")
else:
print(f"{dirpath} はディレクトリではありません")
pathlibモジュールでは、Pathオブジェクトのis_file()メソッドとis_dir()メソッドを使用できます。
パーミッション情報の取得
ファイルのパーミッション情報は、statオブジェクトのst_mode属性から取得できます。
import os
import stat
filepath = 'my_file.txt'
stat_info = os.stat(filepath)
permissions = stat.S_IMODE(stat_info.st_mode)
print(f"パーミッション: {oct(permissions)}")
oct()関数は、パーミッションを8進数で表示します。
例: 0o644 は、所有者:読み取り・書き込み・実行、グループ:読み取り・書き込み、その他:読み取り を意味します。
その他属性の取得
statオブジェクトには、他にも多くの属性が含まれています。必要に応じて、これらの属性を参照してください。例として、最終アクセス時間(st_atime)、変更時間(st_ctime)などがあります。
import os
import time
filepath = 'my_file.txt'
stat_info = os.stat(filepath)
print(f"最終アクセス時間: {time.ctime(stat_info.st_atime)}")
print(f"変更時間: {time.ctime(stat_info.st_ctime)}")
エラーハンドリング
ファイルが存在しない場合、os.stat()関数はFileNotFoundError例外を発生させます。適切な例外処理を行う必要があります。
import os
filepath = 'nonexistent_file.txt'
try:
stat_info = os.stat(filepath)
except FileNotFoundError:
print(f"ファイル {filepath} は見つかりません")
pathlib.Path.stat()も同様にFileNotFoundError例外を発生させます。
その他の例外(例:PermissionError)にも対応する必要があります。
関連記事
- Pythonでファイル・ディレクトリの操作(os, shutil, pathlib)
- Pythonでファイル・ディレクトリの存在確認(os.path.exists, os.path.isfile, os.path.isdir)
- Pythonでディレクトリを作成・削除(os.mkdir, os.makedirs, os.rmdir, shutil.rmtree)
- Pythonでファイル・ディレクトリのコピー・移動(shutil.copy, shutil.move)
- Pythonで一時ファイル・一時ディレクトリを作成(tempfile)
- Pythonでファイルに書き込む(write, writelines)
- Pythonでファイルを開く・閉じる(open, close)
- Pythonでファイルを読み込む(read, readline, readlines)
- Pythonでファイルを追記モードで開く
- Pythonでファイルの上書き・削除