实际案例:
在某些项目中,我们需要获得文件状态,例如:
- 文件的类型(普通文件,目录,符号连接,设备文件...)
- 文件的访问权限
- 文件的最后的访问/修改/节点状态更改时间
- 普通文件的大小
....
解决方案:
- 系统调用:标准库中os模块下的三个系统调用stat,fstat,lstat获取文件状态
- 快捷函数:标准库中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')
网友评论