Python os.stat()函數:獲取檔案基本資訊

2020-07-16 10:04:59
檔案建立後,該檔案本身就會包含一些基本資訊,例如檔案的大小、最後一次修改時間、最後一次存取時間等。通過 os 模組中的 stat() 函數可以獲取到檔案的這些基本資訊。

stat() 函數的基本語法格式如下:

os.stat(path)

其中,path 參數列示目標檔案的存取路徑,可以使用相對路徑,也可以使用絕對路徑。

此函數的返回值是一個物件,其具有表 1 所示的屬性,通過存取這些屬性,就可以獲取指定檔案的基本資訊。

表 1 stat()函數返回物件的常用屬性
屬性名 含義 屬性名 含義
st_mode 保護模式 st_ino 索引號
st_nlink 硬連結號(被連線數目) st_dev 裝置名
st_uid 使用者 ID st_gid 組 ID
st_size 檔案大小,以位元組為單位 st_mtime 檔案最後一次修改時間
st_atime 最後一次存取時間 st_ctime 最後一次狀態變化的時間,作業系統不會,該屬性對應的結果也不同,例如在 Windows 作業系統下返回的就是檔案的建立時間。

下面給大家舉個範例,假設建立一個 a.txt 檔案,並在同一目錄中,建立一個 .py 檔案並編寫如下語句:
import os
fileinfo = os.stat("a.txt")
print("索引號:",fileinfo.st_ino)
print("被連線數目:",fileinfo.st_dev)
print("檔案大小:",fileinfo.st_size,"位元組")
print("最後一次存取時間:",fileinfo.st_atime)
print("最後一次修改時間:",fileinfo.st_mtime)
print("最後一次狀態變化的時間:",fileinfo.st_ctime)
執行結果為:

索引號: 16325548649358561
被連線數目: 3468702398
檔案大小: 35 位元組
最後一次存取時間: 1565314959.9438338
最後一次修改時間: 1565168477.275359
最後一次狀態變化的時間: 1565070909.8918042

注意,由於執行環境不同,讀者的執行結果和以上輸出結果會有差異。

通過觀察以上輸出結果我們發現,時間資訊和平時見到的所有不同。一般情況,為了顯示更加直觀,還需要對時間資訊進行格式化,需要借助 time 模組下的 strftime() 函數,比如:
import os
def formatTime(atime):
    import time
    return time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(atime))
fileinfo = os.stat("a.txt")
print("最後一次存取時間:",formatTime(fileinfo.st_atime))
print("最後一次修改時間:",formatTime(fileinfo.st_mtime))
print("最後一次狀態變化的時間:",formatTime(fileinfo.st_ctime))
輸出結果為:

最後一次存取時間: 2019-08-09 09:42:39
最後一次修改時間: 2019-08-07 17:01:17
最後一次狀態變化的時間: 2019-08-06 13:55:09