python 文件状态_Python:如何访问文件的状态

本文介绍了在Python中如何使用os模块的stat、fstat、lstat等方法来获取文件的状态,包括文件类型、访问权限、最后访问时间、修改时间、节点状态更改时间和文件大小等信息。同时,通过实例展示了如何解析文件状态标志位,检查文件的读写执行权限,以及获取文件的三个时间戳。
摘要由CSDN通过智能技术生成

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

文件状态: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),不是文件路径;

方法二:快捷函数

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

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

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

importos

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)查看文件权限:

importstat#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

importos

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下的一些函数;#更加简洁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值