PYTHON MEBY

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)にも対応する必要があります。

関連記事