python基础教程: os.stat() 和 stat模块详解

python基础教程: os.stat() 和 stat模块详解

stat 系统调用时用来返回相关文件的系统状态信息的。

首先我们看一下stat中有哪些属性:

>>> import os

>>> print (os.stat("/root/python/zip.py"))

(33188, 2033080, 26626L, 1, 0, 0, 864, 1297653596, 1275528102, 1292892895)

>>> print (os.stat("/root/python/zip.py").st_mode) #权限模式

33188

>>> print (os.stat("/root/python/zip.py").st_ino) #inode number

2033080

>>> print (os.stat("/root/python/zip.py").st_dev) #device

26626

>>> print (os.stat("/root/python/zip.py").st_nlink) #number of hard links

1

>>> print (os.stat("/root/python/zip.py").st_uid) #所有用户的user id

0

>>> print (os.stat("/root/python/zip.py").st_gid) #所有用户的group id

0

>>> print (os.stat("/root/python/zip.py").st_size) #文件的大小,以位为单位

864

>>> print (os.stat("/root/python/zip.py").st_atime) #文件最后访问时间

1297653596

>>> print (os.stat("/root/python/zip.py").st_mtime) #文件最后修改时间

1275528102

>>> print (os.stat("/root/python/zip.py").st_ctime) #文件创建时间

1292892895

正如你上面看到的,你可以直接访问到这些属性值。

好了,下面我来看看python中的stat模块,先看看自带的例子:

import os, sys

from stat import *

def walktree(top, callback):

'''recursively descend the directory tree rooted at top,

calling the callback function for each regular file'''

for f in os.listdir(top):

pathname = os.path.join(top, f)

mode = os.stat(pathname).st_mode

if S_ISDIR(mode):

# It's a directory, recurse into it

walktree(pathname, callback)

elif S_ISREG(mode):

# It's a file, call the callback function

callback(pathname)

else:

# Unknown file type, print a message

print ('Skipping %s' % pathname)

def visitfile(file):

print ('visiting', file)

if __name__ == '__main__':

walktree(sys.argv[1], visitfile)

可以这么理解,os.stat是将文件的相关属性读出来,然后用stat模块来处理,处理方式有多重,就要看看stat提供了什么了。

1. 可以对st_mode做相关的判断,如是否是目录,是否是文件,是否是管道等。

先看一下处理os.stat返回的st_mode结果的函数,就想上面的例子中的一样,这些函数可以做出判断:

'''

遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025

寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!

'''

if stat.S_ISREG(mode): #判断是否一般文件

print ('Regular file.')

elif stat.S_ISLNK (mode): #判断是否链接文件

print ('Shortcut.')

elif stat.S_ISSOCK (mode): #判断是否套接字文件

print ('Socket.')

elif stat.S_ISFIFO (mode): #判断是否命名管道

print ('Named pipe.')

elif stat.S_ISBLK (mode): #判断是否块设备

print ('Block special device.')

elif stat.S_ISCHR (mode): #判断是否字符设置

print ('Character special device.')

elif stat.S_ISDIR (mode): #判断是否目录

print ('directory.')

##额外的两个函数

stat.S_IMODE (mode): #返回文件权限的chmod格式

print ('chmod format.')

stat.S_IFMT (mode): #返回文件的类型

print ('type of fiel.')

2.还有一些是各种各样的标示符,这些标示符也可以在os.chmod中使用,下面附上这些标示符的说明:

stat.S_ISUID: Set user ID on execution.不常用stat.S_ISGID: Set group ID on execution.不常用stat.S_ENFMT: Record locking enforced.不常用stat.S_ISVTX: Save text image after execution.在执行之后保存文字和图片stat.S_IREAD: Read by owner.对于拥有者读的权限stat.S_IWRITE: Write by owner.对于拥有者写的权限stat.S_IEXEC: Execute by owner.对于拥有者执行的权限stat.S_IRWXU: Read, write, and execute by owner.对于拥有者读写执行的权限stat.S_IRUSR: Read by owner.对于拥有者读的权限stat.S_IWUSR: Write by owner.对于拥有者写的权限stat.S_IXUSR: Execute by owner.对于拥有者执行的权限stat.S_IRWXG: Read, write, and execute by group.对于同组的人读写执行的权限stat.S_IRGRP: Read by group.对于同组读的权限stat.S_IWGRP: Write by group.对于同组写的权限stat.S_IXGRP: Execute by group.对于同组执行的权限stat.S_IRWXO: Read, write, and execute by others.对于其他组读写执行的权限stat.S_IROTH: Read by others.对于其他组读的权限stat.S_IWOTH: Write by others.对于其他组写的权限stat.S_IXOTH: Execute by others.对于其他组执行的权限例子:我想获得某个文件的属性信息,并查看他的权限信息,用chmod的格式显示出来。

>>> import stat

>>> import os

>>> st = os.stat('sig.txt')

>>> mode = st.st_mode

>>> stat.S_IFMT(mode)

32768

>>> stat.S_IMODE(mode)

438

>>> print (oct(stat.S_IMODE(mode)))#oct 是转换为八进制

0666

相关推荐

MPQMaster(魔兽地图修改器) V1.31.42 绿色版
尼康光学仪器(中国)有限公司工资待遇怎么样
春风十里不如你小红为什么和秋水分手?