Python文件与文件系统系列(5)——stat模块

  stat模块中定义了许多的常量和函数,可以帮助解释 os.stat()、os.fstat()、os.lstat()等函数的结果。

  通常使用 os.path.is*() 这类函数来测试一个文件的类型,这些方法对同一个文件进行多次测试时,stat()系统调用都是不可避免的开销。同时,有些信息是os.path.is*() 这类函数无法提供的,例如检测是否是块设备、字符设备等。

  此时就可以使用 stat 模块及stat模块中的诸多功能,下面是一个例子:

import os, sys
import stat

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 stat.S_ISDIR(mode):
            # It‘s a directory, recurse into it
            walktree(pathname, callback)
        elif stat.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)

   该例子递归遍历命令行参数所指定的目录中的所有普通文件。

例:上面脚本的执行结果

# python stat_test.py data_structure/
visiting data_structure/a.out
visiting data_structure/biThrTree.h
visiting data_structure/biThrTree.c

  stat 模块定义的用来测试文件类型的函数包括:

stat.S_ISDIR(mode)
  如果 mode 来自一个目录,返回一个非0的值。
stat.S_ISCHR(mode)
  判断文件是不是一个字符型设备。
stat.S_ISBLK(mode)

  判断文件是不是一个块设备。

stat.S_ISREG(mode)

  判断mode是不是来自一个普通文件。

stat.S_ISFIFO(mode)

  判断mode是不是来自一个FIFO(如:具名管道)

stat.S_ISLNK(mode)

  判断mode是不是来自一个符号链接。

stat.S_ISSOCK(mode)

  判断mode是不是来自一个套接字。

  上面的这些函数,除了 S_ISDIR 和 S_ISREG,其他都只在 Unix 环境下才有效。

stat.S_IMODE(mode)
  返回 mode 中可以被 os.chmod() 函数设置的部分,在Unix平台上,包括:权限位、sticky bits,set-group-id位、set-uid-bit等。
stat.S_IFMT(mode)  
  返回 mode 中描述文件类型(可以被S_IS*()函数使用)的部分。

All the variables below are simply symbolic indexes into the 10-tuple returned by os.stat()os.fstat() or os.lstat().

stat.ST_MODE

Inode protection mode.

stat.ST_INO

Inode number.

stat.ST_DEV

Device inode resides on.

stat.ST_NLINK

Number of links to the inode.

stat.ST_UID

User id of the owner.

stat.ST_GID

Group id of the owner.

stat.ST_SIZE

Size in bytes of a plain file; amount of data waiting on some special files.

stat.ST_ATIME

Time of last access.

stat.ST_MTIME

Time of last modification.

stat.ST_CTIME

The “ctime” as reported by the operating system. On some systems (like Unix) is the time of the last metadata change, and, on others (like Windows), is the creation time (see platform documentation for details).

The interpretation of “file size” changes according to the file type. For plain files this is the size of the file in bytes. For FIFOs and sockets under most flavors of Unix (including Linux in particular), the “size” is the number of bytes waiting to be read at the time of the call to os.stat()os.fstat(), or os.lstat(); this can sometimes be useful, especially for polling one of these special files after a non-blocking open. The meaning of the size field for other character and block devices varies more, depending on the implementation of the underlying system call.

The variables below define the flags used in the ST_MODE field.

Use of the functions above is more portable than use of the first set of flags:

stat.S_IFSOCK

Socket.

stat.S_IFLNK

Symbolic link.

stat.S_IFREG

Regular file.

stat.S_IFBLK

Block device.

stat.S_IFDIR

Directory.

stat.S_IFCHR

Character device.

stat.S_IFIFO

FIFO.

The following flags can also be used in the mode argument of os.chmod():

stat.S_ISUID

Set UID bit.

stat.S_ISGID

Set-group-ID bit. This bit has several special uses. For a directory it indicates that BSD semantics is to be used for that directory: files created there inherit their group ID from the directory, not from the effective group ID of the creating process, and directories created there will also get the S_ISGID bit set. For a file that does not have the group execution bit (S_IXGRP) set, the set-group-ID bit indicates mandatory file/record locking (see also S_ENFMT).

stat.S_ISVTX

Sticky bit. When this bit is set on a directory it means that a file in that directory can be renamed or deleted only by the owner of the file, by the owner of the directory, or by a privileged process.

stat.S_IRWXU

Mask for file owner permissions.

stat.S_IRUSR

Owner has read permission.

stat.S_IWUSR

Owner has write permission.

stat.S_IXUSR

Owner has execute permission.

stat.S_IRWXG

Mask for group permissions.

stat.S_IRGRP

Group has read permission.

stat.S_IWGRP

Group has write permission.

stat.S_IXGRP

Group has execute permission.

stat.S_IRWXO

Mask for permissions for others (not in group).

stat.S_IROTH

Others have read permission.

stat.S_IWOTH

Others have write permission.

stat.S_IXOTH

Others have execute permission.

stat.S_ENFMT

System V file locking enforcement. This flag is shared with S_ISGID: file/record locking is enforced on files that do not have the group execution bit (S_IXGRP) set.

stat.S_IREAD

Unix V7 synonym for S_IRUSR.

stat.S_IWRITE

Unix V7 synonym for S_IWUSR.

stat.S_IEXEC

Unix V7 synonym for S_IXUSR.

The following flags can be used in the flags argument of os.chflags():

stat.UF_NODUMP

Do not dump the file.

stat.UF_IMMUTABLE

The file may not be changed.

stat.UF_APPEND

The file may only be appended to.

stat.UF_OPAQUE

The directory is opaque when viewed through a union stack.

stat.UF_NOUNLINK

The file may not be renamed or deleted.

stat.UF_COMPRESSED

The file is stored compressed (Mac OS X 10.6+).

stat.UF_HIDDEN

The file should not be displayed in a GUI (Mac OS X 10.5+).

stat.SF_ARCHIVED

The file may be archived.

stat.SF_IMMUTABLE

The file may not be changed.

stat.SF_APPEND

The file may only be appended to.

stat.SF_NOUNLINK

The file may not be renamed or deleted.

stat.SF_SNAPSHOT

The file is a snapshot file.

See the *BSD or Mac OS systems man page chflags(2) for more information.

时间: 2024-10-06 04:58:32

Python文件与文件系统系列(5)——stat模块的相关文章

Python文件与文件系统系列(4)——文件描述字操作

文件描述字(file descriptor,fd)是系统中用来唯一记录当前已经打开的文件的标识号,fd是一个整数. 除了file对象外,Python还提供对fd的操作,对fd的操作更加底层,fd和Python中的file对象是不同的概念.在介绍file对象时已经提过,调用 f.fileno() 可以获得一个文件对象的fd,也可以在一个已有的 fd 上在封装一个 file 对象:f = os.fdopen(fd). 一些 fd 是一个进程创建时事先分配好的: 0——进程的stdin 1——进程的s

Python文件与文件系统(2)——os模块对文件、文件系统操作的支持

三.文件系统操作 os模块的功能主要包括文件系统部分和进程部分,这里介绍其中与文件系统相关的部分. 当请求操作系统失败时,os模块返回内置异常 exceptions.OSError 的实例,可以通过 os.error 访问这个类型,OSError的实例有三种属性: errno:操作系统错误的错误代码 strerror:描述错误的字符串: filename:操作在哪个文件上出错. os模块提供的有用属性 >>> os.curdir'.' 表示当前目录的字符串,Unix和Windows上都是

Python——文件与文件系统

一. file对象与open()函数 三个参数的介绍 二进制与文本文件 缓冲 文件的有序和无序访问 二.file对象的属性.方法 file对象是可以迭代的 file-like对象 三.文件系统操作 四.fd操作 一.file对象与open()函数 file对象是Python内置的数据类型,通过open()函数打开文件可以获得一个file对象. 1. open()函数 open()函数的格式如下: open(filename, mode='r', bufsize=-1) open()返回一个fil

从模块到python文件的两种用法

01模块的四种形式 模块 就是从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名是test.py的话,它的对应模块名就是test) 包 用来从逻辑上组件模块,本质就是一个目录(必须带有一个__init__.py文件) 导入模块 本质就是把python文件解释一遍 导入包 本质就是执行该报下的__init__.py文件:如果要导入包下面的模块:需要先导入包,然后从包下的__init__.py文件中再导入该包下的模块 python可以看成

Python 文件操作函数

这个博客是 Building powerful image classification models using very little data 的前期准备,用于把图片数据按照教程指示放到规定的文件夹中. python 文件处理主要用到 os 模块和 shutil 模块,'sh' 大概是 bash 的意思 os.chdir('path') 改变当前路径到 path os.listdir('path') 输出 path 路径下所有的文件名 os.makedirs('path/dirname')

Python基础笔记系列十:模块

本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 模块 #1.类比于java中的jar包,模块能让你能够有逻辑地组织你的Python代码段.#2.把相关的代码分配到一个模块里能让你的代码个更好用,更易懂.#3.模块也是Python对象,具有随机的名字属性用来绑定或引用.#4.简单来说,模块就是一个保存了Python代码的文件.模块能自定义函数,类和变量.模块里也能包含可执行的代码. 模块引入python提供了很多第三方的

Python系列5之模块

模块 1. 模块的分类 模块,又称构件,是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体). (1)自定义模块 自己定义的一些可以独立完成某个功能的一段程序语句,可以是一个文件,也可以是一个目录. (2)第三方模块 是由其他人写的一些程序语句,我们可以用它来实现自己的功能. (3)内置模块 是由python自己带的一些实现某种特定功能的组件. 2. 模块的导入 (1)python默认的模块寻找路径 当开始导入一个模快的时候,python默认的会先找到第一个路径去看

Python全栈自动化系列之Python编程基础(模块和包)

一.模块 1)定义 模块:模块是一个Python文件,以.py结尾,包含了Python对象定义和Python函数包:Python中的包就是一个包含一个__init__.py文件的目录(文件夹) 2)模块的作用 a.模块让你能够有逻辑地组织你的Python代码段 b.把相关功能的代码写到一个模块里面能让你的代码更好用,更易懂 c.模块能定义函数.类和变量,模块里也能包含可执行的代码 注意点: ①在进行模块导入的时候,会将导入的模块从上往下执行一遍 ②模块导入时,同级目录导入,Pycharm有可能识

python基础学习shutil高级的文件,目录,压缩包处理模块

shutil高级的文件,目录,压缩包处理模块import shutil 复制shutil.copyfileobj(f1,f2) #从一个文件对接复制到另一个文件对象,需要先打开文件shutil.copyfile() #拷贝文件shutil.copystat() #只拷贝文件状态信息 包括 modebits,atime,mtime,flagsshutil.copymode() #值拷贝权限.内容和组,用户均不改变shutil.copy() #拷贝文件和权限shutil.copy2() #同时拷贝文