• python os.stat() 和 stat模块详解


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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    >>> import os
    >>> print os.stat("/root/python/zip.py")
    (33188203308026626L100864129765359612755281021292892895)
    >>> 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.'
     
    复制代码

    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
    复制代码
  • 相关阅读:
    mysqldump 导出数据库为DBname的表名为Tname的表结构 导出数据库的所有表的表结构
    mysqldump 备份某张表 Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions,
    nfs missing codepage or helper program, or other error
    date 增加一个小时 减少一个小时
    mysqldump 备份单个数据库
    mysql删除账户
    怎么删除某个用户的所有帖子?
    mongodb删除重复数据
    ReSharper2018破解详细方法
    激活windows和office
  • 原文地址:https://www.cnblogs.com/huigebj/p/11288688.html
Copyright © 2020-2023  润新知