Python PR

【Python】ファイルのステータスを取得する方法

記事内に商品プロモーションを含む場合があります

この記事では、Python でファイルのステータスを取得する方法を解説します。

ファイルのステータスの取得

ファイルのステータスを取得するには、osモジュール の stat()関数 を使います。

import os

os.stat(path, *, dir_fd=None, follow_symlinks=True)

path引数 に文字列や開いているファイル記述子を指定することで、そのファイルの状態を stat_resultオブジェクト として返します。

シンボリックリンク自体のステータスを取得したい場合は、follow_symlinks引数 に False を指定します。

取得できるステータスについては以下のリンクを参照してください。

Linkos.stat_result - os --- 雑多なオペレーティングシステムインターフェース — Python ドキュメント

サンプル

試しに適当なファイルのステータスを確認してみます。

import os

statinfo = os.stat('main.py')
print(statinfo)

実行結果

os.stat_result(st_mode=33188, st_ino=35317513, st_dev=16777220, st_nlink=1, st_uid=504, st_gid=20, st_size=58, st_atime=1645516069, st_mtime=1645516069, st_ctime=1645516069)

ファイル記述子から取得

ファイル記述子からステータスを取得する場合、os.fstat()関数 が使える。この関数は、Python 3.3 以降では os.stat(fd) と等価です。

import os

os.fstat(fd)

ファイル記述子(ファイルディスクリプタ)の取得

サンプル

試しにファイルディスクリプタからステータスを取得してみます。

with open('main.py', 'r') as f:
    statinfo = os.fstat(f.fileno())
    print(statinfo)

実行結果

os.stat_result(st_mode=33188, st_ino=35317513, st_dev=16777220, st_nlink=1, st_uid=504, st_gid=20, st_size=146, st_atime=1645520137, st_mtime=1645520137, st_ctime=1645520137)

シンボリックリンクをたどらない場合

シンボリックリンクをたどらない場合、os.lstat()関数 が使える。

この関数は、Python 3.3 以降では os.stat()関数 の follow_symlinks引数 を False にして使うのと等価です。

import os

os.lstat(path, *, dir_fd=None)

サンプル

Windows で適当にショートカットを作成し、ステータスを取得してみます。

import os

statinfo = os.lstat('hello.py - ショートカット.lnk')
print(statinfo)

実行結果

os.stat_result(st_mode=33206, st_ino=106397541196741399, st_dev=2789529968, st_nlink=1, st_uid=0, st_gid=0, st_size=628, st_atime=1645521315, st_mtime=1645517562, st_ctime=1645517562)