ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

23. 访问文件的状态

2021-04-25 10:03:39  阅读:167  来源: 互联网

标签:文件 stat 23 st 访问 tm path txt os


要求:

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

  1. 文件的类型(普通文件、目录、符号链接、设备文件…)。

  2. 文件的访问权限。

  3. 文件的最后的访问/修改/节点状态更改时间(即atime/mtime/ctime)。

  4. 普通文件的大小。

解决方案:

  1. 系统调用:标准库os模块中的系统调用stat获取文件状态。

  2. 快捷函数:标准库os.path下一些函数,使用起来更为简洁。


  • 对于os.stat()方法:
os.stat(path, dir_fd, follow_symlinks)

os.stat()方法在给定路径上执行一个stat系统调用,用来返回相关文件的系统状态信息。path表示待检查的路径。

访问软链接文件时,可以使用os.stat(path, follow_symlinks=False),等价于os.lstat(path)


  • 方案1示例:
# lltotal 4
lrwxrwxrwx 1 root root  5 Sep 11 22:04 1.txt -> a.txt
-rw-r--r-- 1 root root 20 Sep 11 22:04 a.txt
drwxr-xr-x 2 root root  6 Sep 11 22:04 dir

>>> import os>>> os.stat('a.txt')os.stat_result(st_mode=33188, st_ino=16988195, st_dev=64768, st_nlink=1, st_uid=0, st_gid=0, st_size=20, st_atime=1568210666, st_mtime=1568210666, st_ctime=1568210666)

>>> a1 = os.stat('a.txt')>>> a2 = os.stat('dir')>>> a3 = os.stat('1.txt')>>> import stat

判断文件类型:

>>> stat.S_IS               #两次Tab键stat.S_ISBLK(   stat.S_ISDIR(   stat.S_ISFIFO(  stat.S_ISLNK(   stat.S_ISREG(   stat.S_ISUID    stat.S_ISWHT(   stat.S_ISCHR(   stat.S_ISDOOR(  stat.S_ISGID    stat.S_ISPORT(  stat.S_ISSOCK(  stat.S_ISVTX>>> stat.S_ISREG(a1.st_mode)             #stat.S_ISREG 判断是否是普通文件True>>> stat.S_ISDIR(a2.st_mode)                #stat.S_ISDIR 判断是否是目录True>>> stat.S_ISLNK(a3.st_mode)                #stat.S_ISLNK 判断是否是链接文件False>>> a4 = os.stat('1.txt', follow_symlinks=False)                #不加follow_symlinks=False时,软链接文件1.txt等同于a.txt>>> stat.S_ISLNK(a4.st_mode)True

不加follow_symlinks=False时,对于软链接文件1.txt,os.stat('1.txt')等同于os.stat('a.txt')

判断文件访问权限:

>>> stat.S_IR               #是否可读stat.S_IREAD  stat.S_IROTH  stat.S_IRWXG  stat.S_IRWXU  
stat.S_IRGRP  stat.S_IRUSR  stat.S_IRWXO>>> stat.S_IW               #是否可写stat.S_IWGRP   stat.S_IWOTH   stat.S_IWRITE  stat.S_IWUSR>>> stat.S_IX               #是否可执行stat.S_IXGRP  stat.S_IXOTH  stat.S_IXUSR>>> stat.S_IRUSR & a1.st_mode256             #说明a.txt对于所属用户来说可读>>> stat.S_IWGRP & a1.st_mode0               #说明a.txt对于所属组来说不可写>>> stat.S_IXOTH & a1.st_mode0               #说明a.txt对于其他用户来说不可执行

查看atime/mtime/ctime:

# ll a.txt -rw-r--r-- 1 root root 20 Sep 11 22:04 a.txt

>>> import time      
>>> time.localtime(a1.st_atime)time.struct_time(tm_year=2019, tm_mon=9, tm_mday=11, tm_hour=22, tm_min=4, tm_sec=26, tm_wday=2, tm_yday=254, tm_isdst=0)>>> time.localtime(a1.st_mtime)time.struct_time(tm_year=2019, tm_mon=9, tm_mday=11, tm_hour=22, tm_min=4, tm_sec=26, tm_wday=2, tm_yday=254, tm_isdst=0)>>> time.localtime(a1.st_ctime)time.struct_time(tm_year=2019, tm_mon=9, tm_mday=11, tm_hour=22, tm_min=4, tm_sec=26, tm_wday=2, tm_yday=254, tm_isdst=0)

查看文件大小:

# ll a.txt -rw-r--r-- 1 root root 20 Sep 11 22:04 a.txt

>>> a1.st_size20

  • 方案2示例:

判断文件类型:

>>> import os>>> os.path.isdir('dir')True>>> os.path.isdir('a.txt')False>>> os.path.isfile('a.txt')True

获取atime/mtime/ctime:

>>> os.path.getatime('a.txt')1568210666.6489995>>> os.path.getmtime('a.txt')1568210666.6489995>>> os.path.getctime('a.txt')1568210666.6489995

获取文件大小:

>>> os.path.getsize('a.txt')20


标签:文件,stat,23,st,访问,tm,path,txt,os
来源: https://blog.51cto.com/u_10272167/2730257

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有