攝影或3C

Python 檔案偵探:如何精準讀取「建立、修改、存取」時間?

在自動化腳本或檔案管理程式中,我們常需要知道:「這張圖是什麼時候存進來的?」、「這個設定檔上次修改是何時?」。

Python 的 pathlib 模組提供了一個強大的 .stat() 方法,能一次抓出檔案的所有身分證資料。本篇教學將以 img02.png 為例,帶您一步步解析這些神秘數字,並將它們翻譯成我們看得懂的日期格式。

1. 取得檔案狀態 (The Stat Result)

首先,我們需要建立一個 Path 物件,並呼叫 .stat()。這會回傳一個 os.stat_result 物件,裡面包含了所有檔案的 metadata。

from pathlib import Path

# 1. 設定檔案路徑
file_path = Path(r"D:\Temp\img02.png")

# 2. 確保檔案存在 (好習慣)
if file_path.exists():
    # 3. 呼叫 .stat() 取得狀態
    file_stat = file_path.stat()
    
    print(f"檔案大小: {file_stat.st_size} bytes")
    print(f"原始 stat 資料: {file_stat}")
else:
    print("找不到檔案!")

file_stat = file_path.stat()

檔案大小: 34803 bytes
原始 stat 資料: os.stat_result(st_mode=33206, st_ino=1407374883652759, st_dev=682610717, st_nlink=1, st_uid=0, st_gid=0, st_size=34803, st_atime=1772680296, st_mtime=1769411104, st_ctime=1770946821)
  1. 三種關鍵時間戳 (Timestamps)
    .stat() 回傳的結果中,有三個我們最關心的屬性。但要注意,它們回傳的都是 Unix Timestamp (自 1970/1/1 起算的秒數,例如 1772679162.5),人類無法直接閱讀。
# 取得原始的時間戳記 (浮點數)
m_timestamp = file_stat.st_mtime
c_timestamp = file_stat.st_ctime
a_timestamp = file_stat.st_atime

print(f"修改時間戳記: {m_timestamp}") 
# 輸出範例: 1768791989.123456
  1. 翻譯成人類可讀格式 (Human Readable)
    為了看懂這些數字,我們需要 datetime 模組來擔任翻譯官。最常用的方法是 datetime.fromtimestamp()。

完整程式碼範例

from pathlib import Path
from datetime import datetime

# 目標檔案
file_path = Path(r"D:\Temp\img02.png")

if file_path.exists():
    stat = file_path.stat()

    # 定義一個轉換函式讓程式碼更乾淨
    def convert_time(timestamp):
        dt_object = datetime.fromtimestamp(timestamp)
        return dt_object.strftime('%Y-%m-%d %H:%M:%S') # 格式化輸出

    # 開始轉換
    m_time_str = convert_time(stat.st_mtime) # 修改時間
    c_time_str = convert_time(stat.st_ctime) # 建立時間
    a_time_str = convert_time(stat.st_atime) # 存取時間

    print(f"檔案: {file_path.name}")
    print("-" * 30)
    print(f"📅 修改時間 (mtime): {m_time_str}")
    print(f"🐣 建立時間 (ctime): {c_time_str}")
    print(f"👁️ 存取時間 (atime): {a_time_str}")

else:
    print(f"錯誤:找不到檔案 {file_path}")

執行結果範例

  1. 進階小知識:為什麼建立時間比修改時間晚?
    在 Windows 上,你常會看到「建立時間 (ctime)」晚於「修改時間 (mtime)」,這這很正常!

修改時間 (mtime) 跟隨檔案內容。只要圖沒修過,這時間就會維持在它當初畫好的那一刻 (例如 2026/01/19)。
建立時間 (ctime) 跟隨檔案在硬碟上的存在。當你在 2026/03/04 下載或複製這張圖到 Temp 時,它對這顆硬碟來說是個「新檔案」,所以建立時間是今天。
快速懶人包
path_obj.stat() 拿到身分證。
.st_mtime 拿到修改時間的秒數。
datetime.fromtimestamp() 把秒數變成日期物件。
.strftime(‘%Y-%m-%d’) 把日期物件變成漂亮字串。

推薦hahow線上學習python: https://igrape.net/30afN

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡