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用于获取所有信息

  1. import os
  2. from datetime import datetime
  3. filename = "/home/yumingmin/test.txt"
  4. t = os.stat(filename)
  5. print(t)
  6. # os.stat_result(
  7. # st_mode=33279,
  8. # st_ino=22236523160166459,
  9. # st_dev=39,
  10. # st_nlink=1,
  11. # st_uid=0,
  12. # st_gid=0,
  13. # st_size=379368,
  14. # st_atime=1642464373,
  15. # st_mtime=1642464373,
  16. # st_ctime=1642486008)

这里主要使用到的是st_atimest_ctimest_mtime,分别对应访问时间、创建事件和修改时间。

  1. from datetime import datetime
  2. print("文件最后的访问时间:", datetime.fromtimestamp(t.st_atime))
  3. print("文件创建的时间:", datetime.fromtimestamp(t.st_ctime))
  4. print("文件最后的修改时间:", datetime.fromtimestamp(t.st_mtime))
  5. # 文件最后的访问时间:2022-01-18 08:06:13.202141
  6. # 文件创建的时间:2022-01-18 14:06:48.896838
  7. # 文件最后的修改时间:2022-01-18 08:06:13.202141

1.1 修改时间

使用os.path.getmtime来获取文件的修改时间,输出值是一个浮点数,我们需要借助datetime.datetime.timestamp函数将其进行转换,从而得到一个时间格式的对象。

  1. import os
  2. from datetime import datetime
  3. filename = "/home/yumingmin/test.txt"
  4. t1 = os.path.getmtime(filename)
  5. print(t1) # 1642464373.2021406
  6. t2 = datetime.datetime.fromtimestamp(t1)
  7. print(t2) # 2022-01-18 08:06:13.202141

1.2 创建时间

获取文件的创建时间与修改时间几乎一致,我们使用os.path.getctime函数来完成。

  1. import os
  2. from datetime import datetime
  3. filename = "/home/yumingmin/test.txt"
  4. t1 = os.path.getctime(filename)
  5. print(t1) # 1642486008.8968382
  6. t2 = datetime.datetime.fromtimestamp(t1)
  7. print(t2) # 2022-01-18 14:06:48.896838

1.3 访问时间

获取文件的访问时间与修改时间几乎一致,我们使用os.path.getatime函数来完成。

  1. import os
  2. from datetime import datetime
  3. filename = "/home/yumingmin/test.txt"
  4. t1 = os.path.getctime(filename)
  5. print(t1) # 1642464373.2021406
  6. t2 = datetime.datetime.fromtimestamp(t1)
  7. print(t2) # 2022-01-18 08:06:13.202141