5-5 如何访问文件的状态?

2019-02-11  本文已影响0人  Diolog

实际案例:
在某些项目中,我们需要获得文件状态,例如:

  1. 文件的类型(普通文件,目录,符号连接,设备文件...)
  2. 文件的访问权限
  3. 文件的最后的访问/修改/节点状态更改时间
  4. 普通文件的大小
    ....

解决方案:

  1. 系统调用:标准库中os模块下的三个系统调用stat,fstat,lstat获取文件状态
  2. 快捷函数:标准库中os.path下一些函数,使用起来更加简洁

测试:

import os

获取文件状态(跟随符号连接)
os.stat('a.txt')

输出结果:
os.stat_result(st_mode=33206, st_ino=562949953566852, st_dev=171730684, st_nlink=1, st_uid=0, st_gid=0, st_size=8402287, st_atime=1549799514, st_mtime=1533054980, st_ctime=1533086202)

os.lstat('a.txt')(不跟随符号连接)

os.lstat(fileno)(参数需要文件的文件描述符)

按照案例要求依次获取文件信息:

s = os.stat('a.txt')

文件类型
import stat
stat.S_ISDIR(s.str_mode)  => False 不是一个文件夹
stat.S_ISREG(s.str_mode)  => True  是一个普通文件

文件权限
s.str_mode & stat.S_IRUSR

最后访问时间
s.st_atime
import time
time.localtime(s.str_time)

文件大小
s.str_size

os.path:

os.path.isdir('x.txt')
os.path.isfile('a.txt')
os.path.islink('a.txt')

返回最近访问时间(浮点型秒数)
os.path.getatime('a.txt')

返回文件 path 创建时间
os.path.getctime('a.txt')

返回最近文件修改时间
os.path.getmtime('a.txt')

返回文件大小,如果文件不存在就返回错误
os.path.getsize('a.txt')
上一篇 下一篇

猜你喜欢

热点阅读