[Python] ファイルの作成・更新日時を取得する方法
Pythonでファイルの作成・更新日時を取得するには、標準ライブラリのos
モジュールやpathlib
モジュールを使用します。
os.path.getctime()
でファイルの作成日時、os.path.getmtime()
で更新日時を取得できます。
また、pathlib.Path
オブジェクトのstat()メソッド
を使うと、st_ctime
で作成日時、st_mtime
で更新日時を取得可能です。
これらのメソッドはUNIXとWindowsで動作が異なる場合があるため、注意が必要です。
ファイルの作成・更新日時を取得する基本的な方法
osモジュールを使った方法
os.path.getctime()で作成日時を取得
os.path.getctime()関数
を使用すると、指定したファイルの作成日時を取得できます。
この関数は、ファイルのパスを引数に取り、作成日時をタイムスタンプ形式で返します。
import os
# ファイルのパスを指定
file_path = 'example.txt'
# 作成日時を取得
creation_time = os.path.getctime(file_path)
print(f'作成日時: {creation_time}')
作成日時: 1633036800.0
os.path.getmtime()で更新日時を取得
os.path.getmtime()関数
を使用すると、指定したファイルの最終更新日時を取得できます。
この関数もファイルのパスを引数に取り、更新日時をタイムスタンプ形式で返します。
import os
# ファイルのパスを指定
file_path = 'example.txt'
# 更新日時を取得
modification_time = os.path.getmtime(file_path)
print(f'更新日時: {modification_time}')
更新日時: 1633036800.0
os.stat()を使った詳細な情報の取得
os.stat()関数
を使用すると、ファイルに関する詳細な情報を取得できます。
この関数は、ファイルのパスを引数に取り、ファイルの状態を示すオブジェクトを返します。
import os
# ファイルのパスを指定
file_path = 'example.txt'
# ファイルの状態を取得
file_stat = os.stat(file_path)
# 作成日時と更新日時を表示
print(f'作成日時: {file_stat.st_ctime}')
print(f'更新日時: {file_stat.st_mtime}')
作成日時: 1633036800.0
更新日時: 1633036800.0
pathlibモジュールを使った方法
Pathオブジェクトのstat()メソッドを使う
pathlib
モジュールを使用すると、よりオブジェクト指向的にファイルの情報を扱うことができます。
Path
オブジェクトのstat()メソッド
を使うことで、ファイルの詳細な情報を取得できます。
from pathlib import Path
# ファイルのパスを指定
file_path = Path('example.txt')
# ファイルの状態を取得
file_stat = file_path.stat()
# 作成日時と更新日時を表示
print(f'作成日時: {file_stat.st_ctime}')
print(f'更新日時: {file_stat.st_mtime}')
作成日時: 1633036800.0
更新日時: 1633036800.0
st_ctimeで作成日時を取得
Path
オブジェクトのstat()メソッド
を使用すると、st_ctime
属性を使って作成日時を取得できます。
from pathlib import Path
# ファイルのパスを指定
file_path = Path('example.txt')
# 作成日時を取得
creation_time = file_path.stat().st_ctime
print(f'作成日時: {creation_time}')
作成日時: 1633036800.0
st_mtimeで更新日時を取得
同様に、st_mtime
属性を使用して更新日時を取得することもできます。
from pathlib import Path
# ファイルのパスを指定
file_path = Path('example.txt')
# 更新日時を取得
modification_time = file_path.stat().st_mtime
print(f'更新日時: {modification_time}')
更新日時: 1633036800.0
ファイルの作成・更新日時をフォーマットする
datetimeモジュールを使った日時のフォーマット
タイムスタンプをdatetimeオブジェクトに変換
datetime
モジュールを使用すると、タイムスタンプをdatetime
オブジェクトに変換できます。
これにより、日時の操作やフォーマットが容易になります。
from datetime import datetime
import os
# ファイルのパスを指定
file_path = 'example.txt'
# 作成日時を取得
creation_time = os.path.getctime(file_path)
# タイムスタンプをdatetimeオブジェクトに変換
creation_datetime = datetime.fromtimestamp(creation_time)
print(f'作成日時: {creation_datetime}')
作成日時: 2021-10-01 00:00:00
strftime()で任意のフォーマットに変換
strftime()メソッド
を使用すると、datetime
オブジェクトを任意のフォーマットに変換できます。
フォーマットは、指定した文字列に基づいて日時を表示します。
from datetime import datetime
import os
# ファイルのパスを指定
file_path = 'example.txt'
# 作成日時を取得
creation_time = os.path.getctime(file_path)
creation_datetime = datetime.fromtimestamp(creation_time)
# 任意のフォーマットに変換
formatted_time = creation_datetime.strftime('%Y年%m月%d日 %H時%M分%S秒')
print(f'フォーマットされた作成日時: {formatted_time}')
フォーマットされた作成日時: 2021年10月01日 00時00分00秒
timeモジュールを使った日時のフォーマット
time.ctime()で可読性の高い形式に変換
time
モジュールのctime()関数
を使用すると、タイムスタンプを可読性の高い形式に変換できます。
この関数は、タイムスタンプを引数に取り、文字列形式で返します。
import time
import os
# ファイルのパスを指定
file_path = 'example.txt'
# 作成日時を取得
creation_time = os.path.getctime(file_path)
# 可読性の高い形式に変換
readable_time = time.ctime(creation_time)
print(f'可読性の高い作成日時: {readable_time}')
可読性の高い作成日時: Fri Oct 1 00:00:00 2021
time.strftime()でカスタムフォーマットに変換
time.strftime()
を使用すると、タイムスタンプをカスタムフォーマットに変換できます。
この関数は、フォーマット文字列を指定して、日時を整形します。
import time
import os
# ファイルのパスを指定
file_path = 'example.txt'
# 作成日時を取得
creation_time = os.path.getctime(file_path)
# カスタムフォーマットに変換
formatted_time = time.strftime('%Y年%m月%d日 %H時%M分%S秒', time.localtime(creation_time))
print(f'カスタムフォーマットされた作成日時: {formatted_time}')
カスタムフォーマットされた作成日時: 2021年10月01日 00時00分00秒
ファイルの作成・更新日時を比較する
作成日時と更新日時の差を計算する
タイムスタンプの差を計算する方法
ファイルの作成日時と更新日時の差を計算するには、os.path.getctime()
とos.path.getmtime()
を使用して、それぞれのタイムスタンプを取得し、その差を計算します。
import os
# ファイルのパスを指定
file_path = 'example.txt'
# 作成日時と更新日時を取得
creation_time = os.path.getctime(file_path)
modification_time = os.path.getmtime(file_path)
# タイムスタンプの差を計算
time_difference = modification_time - creation_time
print(f'作成日時と更新日時の差: {time_difference}秒')
作成日時と更新日時の差: 3600秒
datetimeオブジェクトを使った差分の計算
datetime
モジュールを使用すると、より直感的に日時の差分を計算できます。
datetime
オブジェクトを使って、差分をtimedelta
オブジェクトとして取得できます。
from datetime import datetime
import os
# ファイルのパスを指定
file_path = 'example.txt'
# 作成日時と更新日時を取得
creation_time = os.path.getctime(file_path)
modification_time = os.path.getmtime(file_path)
# datetimeオブジェクトに変換
creation_datetime = datetime.fromtimestamp(creation_time)
modification_datetime = datetime.fromtimestamp(modification_time)
# 差分を計算
time_difference = modification_datetime - creation_datetime
print(f'作成日時と更新日時の差: {time_difference}')
作成日時と更新日時の差: 1:00:00
複数ファイルの更新日時を比較する
複数ファイルの更新日時を取得してソート
複数のファイルの更新日時を比較するには、まずそれぞれのファイルの更新日時を取得し、リストに格納してソートします。
import os
# フォルダ内のファイルを取得
folder_path = 'example_folder'
files = os.listdir(folder_path)
# ファイル名と更新日時のタプルを作成
file_mod_times = [(file, os.path.getmtime(os.path.join(folder_path, file))) for file in files]
# 更新日時でソート
sorted_files = sorted(file_mod_times, key=lambda x: x[1], reverse=True)
# ソート結果を表示
for file, mod_time in sorted_files:
print(f'ファイル: {file}, 更新日時: {mod_time}')
ファイル: file3.txt, 更新日時: 1633036800.0
ファイル: file1.txt, 更新日時: 1633036700.0
ファイル: file2.txt, 更新日時: 1633036600.0
最新のファイルを特定する方法
ソートした結果から最新のファイルを特定するには、リストの最初の要素を取得します。
import os
# フォルダ内のファイルを取得
folder_path = 'example_folder'
files = os.listdir(folder_path)
# ファイル名と更新日時のタプルを作成
file_mod_times = [(file, os.path.getmtime(os.path.join(folder_path, file))) for file in files]
# 更新日時でソート
sorted_files = sorted(file_mod_times, key=lambda x: x[1], reverse=True)
# 最新のファイルを特定
latest_file = sorted_files[0]
print(f'最新のファイル: {latest_file[0]}, 更新日時: {latest_file[1]}')
最新のファイル: file3.txt, 更新日時: 1633036800.0
ファイルの作成・更新日時を使った応用例
一定期間内に更新されたファイルをリストアップする
更新日時を条件にフィルタリングする方法
特定の期間内に更新されたファイルをリストアップするには、各ファイルの更新日時を取得し、指定した期間内にあるかどうかを確認します。
import os
import time
from datetime import datetime, timedelta
# フォルダのパスを指定
folder_path = 'example_folder'
# 現在の日時
now = time.time()
# 一定期間(例:7日間)を設定
time_limit = now - (7 * 24 * 60 * 60)
# 更新日時が一定期間内のファイルをリストアップ
recent_files = []
for file in os.listdir(folder_path):
file_path = os.path.join(folder_path, file)
if os.path.isfile(file_path):
modification_time = os.path.getmtime(file_path)
if modification_time > time_limit:
recent_files.append(file)
print('最近更新されたファイル:')
for file in recent_files:
print(file)
最近更新されたファイル:
file1.txt
file2.txt
フォルダ内のファイルを一括でチェックする
上記の方法を使って、フォルダ内のすべてのファイルを一括でチェックし、更新日時に基づいてフィルタリングすることができます。
import os
import time
# フォルダのパスを指定
folder_path = 'example_folder'
# 現在の日時
now = time.time()
# 一定期間(例:30日間)を設定
time_limit = now - (30 * 24 * 60 * 60)
# 更新日時が一定期間内のファイルをリストアップ
recent_files = [file for file in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, file)) and os.path.getmtime(os.path.join(folder_path, file)) > time_limit]
print('最近更新されたファイル:')
for file in recent_files:
print(file)
最近更新されたファイル:
file3.txt
file4.txt
古いファイルを自動で削除する
更新日時を基にファイルを削除するスクリプト
特定の期間以上更新されていないファイルを自動で削除するスクリプトを作成できます。
import os
import time
# フォルダのパスを指定
folder_path = 'example_folder'
# 一定期間(例:90日間)を設定
time_limit = time.time() - (90 * 24 * 60 * 60)
# 古いファイルを削除
for file in os.listdir(folder_path):
file_path = os.path.join(folder_path, file)
if os.path.isfile(file_path) and os.path.getmtime(file_path) < time_limit:
os.remove(file_path)
print(f'削除しました: {file}')
削除しました: old_file.txt
削除前に確認する処理を追加する方法
削除する前にユーザーに確認を求める処理を追加することができます。
import os
import time
# フォルダのパスを指定
folder_path = 'example_folder'
# 一定期間(例:90日間)を設定
time_limit = time.time() - (90 * 24 * 60 * 60)
# 古いファイルを削除する前に確認
for file in os.listdir(folder_path):
file_path = os.path.join(folder_path, file)
if os.path.isfile(file_path) and os.path.getmtime(file_path) < time_limit:
confirm = input(f'削除しますか? {file} (y/n): ')
if confirm.lower() == 'y':
os.remove(file_path)
print(f'削除しました: {file}')
削除しますか? old_file.txt (y/n): y
削除しました: old_file.txt
ファイルのバックアップを作成する
更新日時を基にバックアップを作成する
ファイルの更新日時を基にバックアップを作成するスクリプトを作成できます。
更新日時が新しいファイルをバックアップフォルダにコピーします。
import os
import shutil
import time
# フォルダのパスを指定
source_folder = 'example_folder'
backup_folder = 'backup_folder'
# 現在の日時
now = time.time()
# 一定期間(例:1日間)を設定
time_limit = now - (1 * 24 * 60 * 60)
# 更新日時が一定期間内のファイルをバックアップ
for file in os.listdir(source_folder):
file_path = os.path.join(source_folder, file)
if os.path.isfile(file_path) and os.path.getmtime(file_path) > time_limit:
shutil.copy(file_path, backup_folder)
print(f'バックアップしました: {file}')
バックアップしました: file1.txt
バックアップしました: file2.txt
バックアップファイルの命名規則を設定する
バックアップファイルの命名規則を設定することで、元のファイル名にタイムスタンプを追加することができます。
import os
import shutil
import time
# フォルダのパスを指定
source_folder = 'example_folder'
backup_folder = 'backup_folder'
# 現在の日時
now = time.time()
# 一定期間(例:1日間)を設定
time_limit = now - (1 * 24 * 60 * 60)
# 更新日時が一定期間内のファイルをバックアップ
for file in os.listdir(source_folder):
file_path = os.path.join(source_folder, file)
if os.path.isfile(file_path) and os.path.getmtime(file_path) > time_limit:
timestamp = time.strftime('%Y%m%d_%H%M%S', time.localtime())
backup_file_name = f'{file}_{timestamp}'
shutil.copy(file_path, os.path.join(backup_folder, backup_file_name))
print(f'バックアップしました: {backup_file_name}')
バックアップしました: file1.txt_20231001_120000
バックアップしました: file2.txt_20231001_120000
まとめ
この記事では、Pythonを使用してファイルの作成日時や更新日時を取得する方法について詳しく解説しました。
また、これらの日時をフォーマットしたり、比較したりする方法、さらには応用例として特定の条件に基づいてファイルをリストアップしたり、古いファイルを削除したり、バックアップを作成する方法についても触れました。
これらの知識を活用することで、ファイル管理やデータ処理の効率を向上させることができるでしょう。
ぜひ、実際のプロジェクトや日常のタスクにこれらのテクニックを取り入れて、より効果的なファイル操作を行ってみてください。