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

枫铃3年前 (2021-10-03)Python245

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

相关文章

利用python同步windows和linux文件

写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,...

爬虫基本原理

爬虫基本原理 一、爬虫是什么? 百度百科和维基百科对网络爬虫的定义:简单来说爬虫就是抓取目标网站内容的工具,一般是根据定义的行...

Django 函数和方法的区别

函数和方法的区别 1、函数要手动传self,方法不用传 2、如果是一个函数,用类名去调用,如果是一个方法...

Django 知识补漏单例模式

单例模式:(说白了就是)创建一个类的实例。在 Python 中,我们可以用多种方法来实现单例模式&#x...

Django基础知识MTV

Django简介 Django是使用Python编写的一个开源Web框架。可以用它来快速搭建一个高性能的网站。 Django也是一个MVC框架。但是在Dj...

Python mysql 索引原理与慢查询优化

一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。