zoukankan      html  css  js  c++  java
  • Python3 os.stat() 方法


    概述

    os.stat() 方法用于在给定的路径上执行一个系统 stat 的调用。
    语法

    stat()方法语法格式如下:

    os.stat(path)

    参数

        path -- 指定路径

    返回值

    stat 结构:

        st_mode: inode 保护模式
        st_ino: inode 节点号。
        st_dev: inode 驻留的设备。
        st_nlink: inode 的链接数。
        st_uid: 所有者的用户ID。
        st_gid: 所有者的组ID。
        st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
        st_atime: 上次访问的时间。
        st_mtime: 最后一次修改的时间。
        st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

    实例

    以下实例演示了 stat() 方法的使用:

    #!/usr/bin/python3

    import os, sys

    # 显示文件 "a2.py" 信息
    statinfo = os.stat('a2.py')

    print (statinfo)

    执行以上程序输出结果为:

    posix.stat_result(st_mode=33188, st_ino=3940649674337682L, st_dev=277923425L, st
    _nlink=1, st_uid=400, st_gid=401, st_size=335L, st_atime=1330498089, st_mtime=13
    30498089, st_ctime=1330498089)

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

    好了,下面我来看看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.'
     
    复制代码

    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

  • 相关阅读:
    moss文档库操作的几个类
    Infopath web浏览中的多项选择功能
    国际软件项目经理的七大素质转
    InfoPath中的Rich Text Box中如何加“回车”
    设计模式——策略模式
    设计模式——状态模式
    设计模式——备忘模式
    设计模式——中介者模式
    关与BaseDataList类型绑定ArrayList
    设计模式——命令模式
  • 原文地址:https://www.cnblogs.com/fmgao-technology/p/9056425.html
Copyright © 2011-2022 走看看