码迷,mamicode.com
首页 > 其他好文 > 详细

问题24:如何访问文件的状态

时间:2018-04-13 14:26:36      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:设备文件   路径   标志位   方法   result   修改时间   参考   时间   设备   

一、案例:在某些项目中,需要获取文件的状态

文件状态:os.stat(path)

  1、文件的类型:普通文件、目录、符号链接、设备文件或管道(一般在Linux上)。。。

  2、文件的访问权限:一般为读、写、执行,3个权限;

  3、文件的最后的访问时间(对应read操作)、最后的修改时间(对应write操作)、最后的节点状态更改时间(对应的chang_move、chang_name的操作)

  4、获取普通文件的大小,也就是字节数

#普通文件:如.py、.txt、.csv等;

#目录文件:目录d/

#符号链接文件:x.txt -> a.txt,也就是x.txt引用了普通文件a.txt

 

二、Python中如何获取文件的状态

方法一:系统调用

  标准库os模块下的三个系统调用:stat、fstat、lstat,获取文件状态;

1)os.stat(path)、os.lstat(path)、os.fstat(fileno):获取指定文件的状态;

2)stat和lstat的差异:表现在对符号链接文件的操作,如x.txt -> a.txt:

 #os.lstat(‘x.txt‘):返回符号链接x.txt文件的状态;

 #os.stat(‘x.txt‘):返回的是a.txt文件的状态,因为stat,要跟随符号链接,指向a.txt文件;

3)fstat和stat功能一样,差异:os.fstat()操作的是文件的描述符(fileno),不是文件路径;

 #关于文件描述符,可参考:问题23:如何将文件映射到内存

方法二:快捷函数

  标准库中os.path下的一些函数;#更加简洁

  #可参考:Python:文件操作

三、实例查看文件状态(采用方法一)

 1)得到文件类型:os.stat(‘test.txt‘).st_mode

import os

f = open(test.txt, w)
s = abcde
f.write(s)
f.close()

#得到文件状态
test = os.stat(test.txt)
#查看文件状态
print(test)
#输出:os.stat_result(st_mode=33206, st_ino=562949953421655, st_dev=995426, st_nlink=1, st_uid=0, st_gid=0, st_size=5, st_atime=1523433493, st_mtime=1523588571, st_ctime=1523433493)

#文件类型存放在st_mode中
print(test.st_mode)
#输出:33206
#33206实际上是一些标志位构成的;

#将状态的标志位转换为二进制(用bin函数),也就是解析此标志位,可直观看出33206所表示的标志位
print(bin(test.st_mode))
#输出:0b1000000110110110
import stat
#查看stat模块的功能
print(help(stat))

 2)查看文件权限:

import stat

#stat.S_ISDIR:判断文件是不是目录,若是,返回True,否则返回False
s1 = stat.S_ISDIR(test.st_mode)

#stat.S_ISREG:判断文件是不是普通文件;
s2 = stat.S_ISREG(test.st_mode)

#stat.S_ISBLK:判断是否是块设备;

#查看文件的读权限,通过与stat.S_IRUSR(读权限)取交集,来看文件是否有读权限;
test.st_mode & stat.S_IRUSR

#查看用户对文件的执行权限
test.st_mode & stat.S_IXUSER

#查看其它人对文件的执行权限
test.st_mode & stat.S_IXOTH

 3)查看文件的三个时间状态,访问、修改、更新:os.stat(‘test.txt‘).st_atime/st_mtime/st_ctime

import os

f = open(test.txt, w)
s = abcde
f.write(s)
f.close()

#得到文件状态
test = os.stat(test.txt)
#查看文件状态
print(test)
#输出:os.stat_result(st_mode=33206, st_ino=562949953421655, st_dev=995426, st_nlink=1, st_uid=0, st_gid=0, st_size=5, st_atime=1523433493, st_mtime=1523588571, st_ctime=1523433493)

#查看3个时间,并通过time模块下的locatime()方法将秒改为现代时间
import time
#查看最近的访问时间:test.st_time
print(time.locatime(test.
st_atime))

#查看最近修改时间:test.st_mtime
print(time.locatime(test.st_mtime))

#查看最近节点状态更新时间:test.st_ctime
print(time.locatime(test.st_ctime))

 4)查看文件大小

#输出:os.stat_result(st_mode=33206, st_ino=562949953421655, st_dev=995426, st_nlink=1, st_uid=0, st_gid=0, st_size=5, st_atime=1523433493, st_mtime=1523588571, st_ctime=1523433493)

#查看文件大小:字节数
print(test.st_size)

 

四、实例查看文件状态(采用方法一)

标准库中os.path下的一些函数;#更加简洁

  #可参考:Python:文件操作

 

问题24:如何访问文件的状态

标签:设备文件   路径   标志位   方法   result   修改时间   参考   时间   设备   

原文地址:https://www.cnblogs.com/volcao/p/8819842.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!