1. 获取文件的时间状态
在日常的任务中,对于文件的时间状态不怎么关心,因为使用到文件时间状态的场景并不多。但是有时候我们的跑批任务会每天固定去读一个文件(该文件每天会刷新),如果对于文件的创建时间或修改时间不加以检查,就会造成读取的还是当天还未更新的文件,必然所生成的数据也是错误的。
通常文件的时间状态包含修改时间、创建时间以及访问时间,我们可以使用os包来获取对应状态,具体所使用到函数如下表:
| 函数 | 描述 |
|---|---|
| os.path.getatime | 文件的访问时间 |
| os.path.getctime | 文件的创建事件 |
| os.path.getmtime | 文件的最近修改时间 |
:::info
🕖 小技巧
————————————
getatime中的a可以记为 arrive,表示访问getctime中的c可以记为 create,表示创建getmtime中的m可以记为 modify,表示修改 :::
除了使用上述 3 个函数获取对应的时间状态,os库还提供了一个函数os.stat用于获取所有信息
import osfrom datetime import datetimefilename = "/home/yumingmin/test.txt"t = os.stat(filename)print(t)# os.stat_result(# st_mode=33279,# st_ino=22236523160166459,# st_dev=39,# st_nlink=1,# st_uid=0,# st_gid=0,# st_size=379368,# st_atime=1642464373,# st_mtime=1642464373,# st_ctime=1642486008)
这里主要使用到的是st_atime、st_ctime和st_mtime,分别对应访问时间、创建事件和修改时间。
from datetime import datetimeprint("文件最后的访问时间:", datetime.fromtimestamp(t.st_atime))print("文件创建的时间:", datetime.fromtimestamp(t.st_ctime))print("文件最后的修改时间:", datetime.fromtimestamp(t.st_mtime))# 文件最后的访问时间:2022-01-18 08:06:13.202141# 文件创建的时间:2022-01-18 14:06:48.896838# 文件最后的修改时间:2022-01-18 08:06:13.202141
1.1 修改时间
使用os.path.getmtime来获取文件的修改时间,输出值是一个浮点数,我们需要借助datetime.datetime.timestamp函数将其进行转换,从而得到一个时间格式的对象。
import osfrom datetime import datetimefilename = "/home/yumingmin/test.txt"t1 = os.path.getmtime(filename)print(t1) # 1642464373.2021406t2 = datetime.datetime.fromtimestamp(t1)print(t2) # 2022-01-18 08:06:13.202141
1.2 创建时间
获取文件的创建时间与修改时间几乎一致,我们使用os.path.getctime函数来完成。
import osfrom datetime import datetimefilename = "/home/yumingmin/test.txt"t1 = os.path.getctime(filename)print(t1) # 1642486008.8968382t2 = datetime.datetime.fromtimestamp(t1)print(t2) # 2022-01-18 14:06:48.896838
1.3 访问时间
获取文件的访问时间与修改时间几乎一致,我们使用os.path.getatime函数来完成。
import osfrom datetime import datetimefilename = "/home/yumingmin/test.txt"t1 = os.path.getctime(filename)print(t1) # 1642464373.2021406t2 = datetime.datetime.fromtimestamp(t1)print(t2) # 2022-01-18 08:06:13.202141
