(原创)Python文件与文件系统系列(5)——stat模块
stat模块中定义了许多的常量和函数,可以帮助解释 os.stat()、os.fstat()、os.lstat()等函数返回的 st_result 类型的对象。
通常使用 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)
- 判断文件是不是一个目录。
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.
(原创)Python文件与文件系统系列(5)——stat模块的更多相关文章
- (原创)Python文件与文件系统系列(1)—— file 对象
本系列将从四个部分简单介绍Python对文件系统的操作与支持: 1. Python内置的 file 对象 2. Python的os模块对文件.文件系统操作的支持 3. Python的os.path模块 ...
- (原创)Python文件与文件系统系列(2)——os模块对文件、文件系统操作的支持
os模块的功能主要包括文件系统部分和进程管理部分,这里介绍其中与文件系统相关的部分. 当请求操作系统执行操作失败时,os模块抛出内置异常 exceptions.OSError 的实例,可以通过 os. ...
- (原创)Python文件与文件系统系列(3)——os.path模块
os.path 模块实现了一些操作路径名字符串的函数,可以通过 import os.path 使用该模块,不过即使仅仅 import os 也可以使用该模块的方法. 1. abspath(path) ...
- (原创)Python文件与文件系统系列(4)——文件描述字操作
文件描述字(file descriptor,fd)是系统中用来唯一记录当前已经打开的文件的标识号,fd是一个整数. 除了file对象外,Python还提供对fd的操作,对fd的操作更加底层,fd和Py ...
- Python 1-3区分Python文件的两种用途和模块的搜索路径
区分Python文件的两种用途 run.py文件: import m1 m1.py文件: def f1(): print('f1') def f2(): print('f2') #当文件被执行时__n ...
- Python知识点入门笔记——Python文件操作、异常处理及random模块使用
文件是存储在外部介质的数据集合,通常可以长久保存,前提是介质不易损坏 Python的绝对路径写法: E:\\编程学习资料\\爬取某社区高清无码大图.py E:/编程学习资料/爬取某社区高清无码大图.p ...
- Python 文件操作函数
这个博客是 Building powerful image classification models using very little data 的前期准备,用于把图片数据按照教程指示放到规定的文 ...
- 模块导入及使用,关键字,模块搜索路径,python文件的两种用途
06.05自我总结 一.模块导入及使用 1.模块导入的两种方式 我们拿time模块并使用其中的time功能进行举例 a)第一种 import time print(time.time) import首 ...
- [原创]Python批量操作文件,批量合并
最近几个小伙伴在手动合并一些文本文件,感觉可以用Python批量实现,就有了这段代码 import os import re import sys def printEnter(f1): #每两个文件 ...
随机推荐
- awk多文件操作
awk 多文件操作2种实现方法 我们经常会将2个有关联文本文件进行合并处理.分别从不同文件获取需要的列,然后, 整体输出到一起.awk进行多文件处理时候,常常会遇到2个方面问题,第一个是怎么样合并多个 ...
- eclipse中Preferences的一些设置
1.在Eclipse里面设置了java文件保存时自动格式化,在java->Code Style->Formatter里设置了自定义的格式化的样式,这样每次保存后都会自动格式化代码,用了一段 ...
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载 中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...
- Mac 鼠须管 合并词库 简单使用
之前一直没用过合成词库这功能,有个同步用户数据的选项,点它后,生成一个文件夹,里面就有当前的一些配置,词库之类的 /Users/dfpo/Library/Rime/sync 这样我们就得到了一个装着用 ...
- WPF 任务栏图标闪烁提醒
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServi ...
- GDB中应该知道的几个调试方法 来自陈皓
GDB中应该知道的几个调试方法 2011年2月10日陈皓发表评论阅读评论62,325 人阅读 七.八年前写过一篇<用GDB调试程序>,于是,从那以后,很多朋友在MSN上以及给我发邮件询 ...
- UML(统一建模语言)
最近看了一个UML图,所以特意来了解一下UML 统一建模语言 锁定 同义词 UML(统一建模语言)一般指统一建模语言 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . Unified Mo ...
- Windows 下 tail 查看日志命令工具分享
以前在公司时服务器上面可以实现tail 命令查看程序运行日志,感觉相当不错,上网查了下这些命令是linux 下的,还好有好心人开发了一个可以在Windows下的运行的小工具,来给分享一下: 使用方法: ...
- cocos基础教程(2)Window环境下搭建
第一步:开始安装VS2012 第二步:下载Cocos2d-x 3.4源码 配置环境变量 COCOS_CONTROL = E:\cocos2d-x-3.4\tools\cocos2d-console ...
- LR 测试数据库总结
今天工作中需要对mysql进行性能测试 我尝试用LR来做:但是mysql需要现在电脑上安装一个OBDC的mysql驱动器,然后在电脑的管理工具中的数据源中加入这个mysql驱动,测试连接数据库成功,O ...