Categories: Python

【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)
ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

5か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago