Pythonでファイルの更新日やサイズを取得する方法!初心者でもわかるos.stat()の使い方
生徒
「Pythonでファイルの情報って調べられますか?たとえば更新日時とかサイズとか…」
先生
「はい、できますよ!os.stat()という関数を使えば、ファイルのサイズや最終更新日、作成日時などを取得できます。」
生徒
「おお…なんか難しそう。でも知っておきたいです!」
先生
「大丈夫です。初心者向けに丁寧に説明しますね。まずは基本から見ていきましょう!」
1. os.stat()とは?
os.stat()は、Pythonでファイルやフォルダの情報を取得できる便利な関数です。ファイルサイズ(バイト単位)や、最終更新日時、作成日時など、さまざまな情報をまとめて取り出すことができます。
この関数はosモジュールに含まれているので、まずはimport osしてから使います。
2. ファイルサイズを取得する方法
ファイルのサイズはst_sizeという属性から取得できます。単位はバイト(B)です。
import os
info = os.stat("sample.txt")
print("ファイルサイズ:", info.st_size, "バイト")
このようにすることで、指定したファイルのサイズを確認できます。KB(キロバイト)で見たい場合は、st_size / 1024で計算しましょう。
3. 更新日時を取得する方法
os.stat()で取得できる日時は3種類あります:
st_atime:アクセス日時(最後に読まれた時刻)st_mtime:更新日時(最後に変更された時刻)st_ctime:作成日時(※OSにより意味が異なる)
日時の値は「エポック秒」と呼ばれる形式なので、datetimeモジュールで見やすい形式に変換します。
import os
from datetime import datetime
info = os.stat("sample.txt")
print("更新日時:", datetime.fromtimestamp(info.st_mtime))
これで、「2025-09-03 12:34:56」のように、人間にもわかりやすい形式で表示されます。
4. ファイルの作成日時を調べるには?
st_ctimeは、Windowsでは「作成日時」を示しますが、LinuxやMacでは「ファイルの属性が最後に変更された時刻」になります。
そのため、正確な「作成日時」を取得したい場合は、OSによって意味が変わることに注意が必要です。
print("作成日時:", datetime.fromtimestamp(info.st_ctime))
5. ファイル情報をまとめて表示するプログラム
それでは、これまでの知識を使って、ファイルのサイズ・更新日・作成日をまとめて表示する簡単なスクリプトを作ってみましょう。
import os
from datetime import datetime
def show_file_info(path):
info = os.stat(path)
print("ファイル名:", path)
print("サイズ:", info.st_size, "バイト")
print("最終更新日:", datetime.fromtimestamp(info.st_mtime))
print("作成日:", datetime.fromtimestamp(info.st_ctime))
show_file_info("sample.txt")
このプログラムを使えば、複数のファイルを調べることも簡単にできます。
6. 複数ファイルの情報を一括取得する方法
たとえば、あるフォルダの中にあるすべてのファイルの情報を一括で取得したい場合は、os.listdir()と組み合わせます。
folder = "documents"
for filename in os.listdir(folder):
path = os.path.join(folder, filename)
if os.path.isfile(path):
show_file_info(path)
このようにすれば、フォルダ内のすべてのファイルに対して、更新日時やサイズを取得できます。
7. 単位をわかりやすくする工夫
ファイルサイズはバイトで表示されますが、「12345678バイト」と言われても、ピンとこないですよね。そんなときは、KBやMB単位に変換しましょう。
size_kb = info.st_size / 1024
size_mb = info.st_size / (1024 * 1024)
print("サイズ(KB):", round(size_kb, 2))
print("サイズ(MB):", round(size_mb, 2))
round()で小数点を調整して、見やすい表示にできます。
8. ファイルが存在するかどうかを事前に確認しよう
対象のファイルが存在しない場合、os.stat()を使うとエラーになります。事前にos.path.exists()でチェックしておきましょう。
import os
if os.path.exists("sample.txt"):
info = os.stat("sample.txt")
else:
print("ファイルが存在しません")
このように安全確認を入れておけば、初心者でも安心してファイル操作ができます。
まとめ
この記事では、Pythonでファイルの更新日時やサイズなどの情報を取得する方法について、基礎から実践まで幅広くふり返りました。ファイルの管理は、日常のプログラム作成でも非常に重要な作業であり、特にログファイルの整理や定期的なバックアップ処理、データ分析の前処理など、さまざまな場面で正確なファイル情報が必要になります。Pythonでは、os.stat関数を使うことでファイルが持つ詳細な情報を一度に取得することができ、複雑な処理をしなくても簡単にファイルの状態を確認できるようになります。 まず、os.statを実行すると、ファイルサイズを示すst_size、最終更新日時を示すst_mtime、作成日時や属性変更時刻として使われるst_ctimeなどが取得できます。これらの値はエポック秒と呼ばれる形式で返されるため、そのままでは読みづらいのですが、datetimeモジュールを組み合わせることで、人間にも分かりやすい年月日と時刻に変換できます。とくにst_mtimeは実務でもよく使われる値で、ファイルがどのタイミングで更新されたかを把握するのに役立ちます。 また、ファイルのサイズはバイト単位で返されるため、用途に応じてキロバイトやメガバイトに変換することでより直感的に理解しやすくなります。たとえば、大きな画像ファイルや動画ファイルが占める容量を一覧表示する処理では、サイズの単位をそろえて表示することで確認しやすくなり、フォルダ内の整理にも活用できます。プログラムでサイズを自動計算させれば、手作業でひとつずつ確認する手間も省け、効率的なファイル管理が実現できます。 さらに、フォルダ内の複数ファイルをまとめて処理する方法も紹介しました。os.listdirを使用すればフォルダ内のファイル名を取得でき、os.path.joinでパスを結合して正しい位置のファイルにアクセスできます。そしてos.path.isfileで本当にファイルであることを確認したうえでos.statを実行すると、複数ファイルの更新日時やサイズを一度に確認できるプログラムが作れます。これを応用すれば、更新日時が一定より古いファイルを自動的に削除したり、サイズが一定以上のファイルだけを別のフォルダへ移動したりする整理スクリプトも作れるようになります。 また、ファイルが存在しない場合にos.statを実行するとエラーになるため、事前にos.path.existsで存在チェックを行う重要性についても確認しました。実際のプログラムでは、存在チェックを行うことで予期しないエラーを減らし、より安全なコードを書くことができます。このチェックは初心者だけでなく実務でもよく利用される書き方であり、ファイル操作を行う際には欠かせない基本の流れといえます。 実際の開発現場では、ファイルの更新日が一定期間内かどうかを自動判定したり、データベースに保存した時刻と比較して同期処理を行ったりと、日時情報を扱う場面が多く存在します。datetimeとos.statを組み合わせて扱えるようになると、こうした実務に近い処理も自然と作れるようになり、Pythonスクリプトの幅が大きく広がります。今回学んだ更新日時・作成日時・アクセス日時の違いを理解しておけば、さまざまなデータ整理や自動化の場面で役立てることができます。
まとめをふまえたサンプルプログラム
ここでは、記事全体の内容をまとめた実践的なサンプルコードを紹介します。フォルダ内のすべてのファイルについて、サイズと更新日時を分かりやすい形式で表示するプログラムです。自分の環境に合わせてフォルダ名を変更すれば、そのまま活用できます。
import os
from datetime import datetime
def show_file_info(path):
info = os.stat(path)
print("ファイル名:", os.path.basename(path))
print("サイズ:", info.st_size, "バイト")
print("更新日時:", datetime.fromtimestamp(info.st_mtime))
print("作成日時:", datetime.fromtimestamp(info.st_ctime))
print("-" * 40)
folder = "documents"
for filename in os.listdir(folder):
file_path = os.path.join(folder, filename)
if os.path.isfile(file_path):
show_file_info(file_path)
このサンプルを応用すれば、「一定サイズ以上のファイルだけを抽出する」「更新されたばかりのファイルだけを別のフォルダへ移動する」などの処理も作れます。ファイルの情報を正しく取得できるようになると、自分で考えた整理ルールにあわせてPythonに作業を任せることができ、作業効率が大きく向上します。
生徒「きょうの内容で、ファイルの更新日やサイズをPythonで調べられることが分かりました。仕組みが分かると意外とむずかしくないんですね。」
先生「そうなんです。os.statを使えば、一度にいろいろな情報が取れるのでとても便利です。更新日時やサイズは実務でもよく使われる情報なので、覚えておくと必ず役立ちますよ。」
生徒「st_mtimeやst_ctimeのちがいもよく理解できました。特にdatetimeと組み合わせるところがポイントなんですね。」
先生「その通りです。日時を読みやすい形に変換できると、一気に実用的になります。フォルダ内をまとめて調べる処理も、慣れるととても簡単ですよ。」
生徒「ファイルが存在しないときのチェックも大事なんですね。今まで意識したことがなかったので、これから気をつけます。」
先生「存在チェックは基本だけど、とても重要な習慣です。安全にファイルを扱えるとプログラム全体が安定しますから、ぜひ続けてみてくださいね。」
生徒「はい!今回の内容を使って、自分でもファイル整理のスクリプトを作ってみようと思います。」
先生「いいですね。今回学んだ知識はさまざまな場面で応用できるので、どんどん試してみましょう。」