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结果的函数,就想上面的例子中的一样,这些函数可以做出判断:

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.'
  1. 还有一些是各种各样的标示符,这些标示符也可以在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

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### Python `os` 模块中的 `stat()` 函数 #### 功能描述 `os.stat(path)` 获取由 `path` 参数指定的路径的信息,其功能等同于 C API 中的 `stat()` 系统调用[^2]。此函数返回一个包含文件或目录状态信息的对象。 #### 返回值解释 该函数返回的是一个名为 `posix.stat_result` 的对象,其中包含了多个属性来表示不同类型的元数据: - **st_mode**: 文件模式 (权限位) - **st_ino**: inode 编号 - **st_dev**: 设备编号 - **st_nlink**: 链接数 - **st_uid**: 所有者的用户ID - **st_gid**: 所属组的组ID - **st_size**: 对于常规文件而言是指字节数;对于特殊文件则可能无意义 - **st_atime**: 上次访问时间戳 - **st_mtime**: 最近一次修改的时间戳 - **st_ctime**: 在Unix上是上次状态改变的时间,在Windows则是创建时间 这些字段可以帮助开发者更好地理解目标文件的状态以及它在文件系统内的位置其他特性[^4]。 #### 示例代码 下面是一个简单的例子展示如何使用 `os.stat()` 来获取并打印某个文件的状态信息: ```python import os file_path = 'example.txt' stats = os.stat(file_path) print(f"File Mode: {oct(stats.st_mode)}") # 输出八进制形式的权限位 print(f"Inode Number: {stats.st_ino}") print(f"Device ID: {stats.st_dev}") print(f"Number of Links: {stats.st_nlink}") print(f"User ID: {stats.st_uid}") print(f"Group ID: {stats.st_gid}") print(f"Size in Bytes: {stats.st_size} bytes") print(f"Last Access Time: {stats.st_atime}") print(f"Last Modified Time: {stats.st_mtime}") print(f"Creation/Status Change Time: {stats.st_ctime}") ``` 这段脚本会读取名为 `example.txt` 的文件的相关统计信息,并将其逐项显示出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值