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 os
from datetime import datetime
filename = "/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 datetime
print("文件最后的访问时间:", 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 os
from datetime import datetime
filename = "/home/yumingmin/test.txt"
t1 = os.path.getmtime(filename)
print(t1) # 1642464373.2021406
t2 = datetime.datetime.fromtimestamp(t1)
print(t2) # 2022-01-18 08:06:13.202141
1.2 创建时间
获取文件的创建时间与修改时间几乎一致,我们使用os.path.getctime
函数来完成。
import os
from datetime import datetime
filename = "/home/yumingmin/test.txt"
t1 = os.path.getctime(filename)
print(t1) # 1642486008.8968382
t2 = datetime.datetime.fromtimestamp(t1)
print(t2) # 2022-01-18 14:06:48.896838
1.3 访问时间
获取文件的访问时间与修改时间几乎一致,我们使用os.path.getatime
函数来完成。
import os
from datetime import datetime
filename = "/home/yumingmin/test.txt"
t1 = os.path.getctime(filename)
print(t1) # 1642464373.2021406
t2 = datetime.datetime.fromtimestamp(t1)
print(t2) # 2022-01-18 08:06:13.202141