(原创)Python文件与文件系统系列(2)——os模块对文件、文件系统操作的支持
os模块的功能主要包括文件系统部分和进程管理部分,这里介绍其中与文件系统相关的部分。
当请求操作系统执行操作失败时,os模块抛出内置异常 exceptions.OSError 的实例,可以通过 os.error 访问这个类型,OSError的实例有三种属性:
- errno:操作系统错误的错误代码
 - strerror:描述错误的字符串;
 - filename:操作在哪个文件上出错。
 
1. os模块提供的有用属性:
1.1 curdir
>>> os.curdir
'.'
表示当前目录的字符串,Unix和Windows上都是“.”。
1.2 pardir
>>> os.pardir
'..'
表示父目录的字符串,Unix和Windows上都是“..”。
1.3 defpath
>>> os.defpath
'.;C:\\bin'
程序的默认搜索路径,如果缺乏PATH环境变量时使用。
1.4 linesep
>>> os.linesep
'\r\n'
文本行的结尾字符串,Unix上是'\n',Windows上是'\r\n'。
1.5 extsep
>>> os.extsep
'\r\n'
分隔文件的扩展名和文件名的分隔符,Unix和Windows上都是“.”。
1.6 pathsep
>>> os.pathsep
';'
路径列表中用来分隔路径的分隔符,可以参考PATH环境变量,Unix平台上是“:”,Windows平台上是";"。
1.7 sep
>>> os.sep
'\\'
路径组成的分割符,在Unix平台上是"/",Windows平台上是"\\"。
2. os模块提供的与文件系统相关的方法
2.1 access(path, mode)
os.access(path, mode)
# e.g.
>>> os.access("C:\Windows\System32", os.R_OK | os.W_OK)
True
access()函数判断当前进程的真实用户(组)(real user / real group)是否具有对路径 path 执行所有 mode 中列出的操作的权限,参数mode的可选值包括:
- os.F_OK:路径指定的文件是否存在;
 - os.R_OK:路径指定的文件是否可读;
 - os.W_OK:路径指定的文件是否可写;
 - os.X_OK:路径指定的文件是否可执行;
 
2.2 chdir(path)
os.chdir(path)
# e.g.
>>> os.chdir("c:/")
等于 cd 到路径path,即將pwd切換到 path 指定的路径。
2.3 chmod(path, mode)
os.chmod(path, mode)
将 path 的访问权限设置为mode ,mode 可以是0或多个 os.R_OK,os.W_OK,os.X_OK,也可是3位8进制的整数(Unix平台),如 0777, 0664等。
2.4 getcwd()
os.getcwd()
#e.g.
>>> os.getcwd()
'c:\\'
getcwd()获取当前工作目录的路径。
2.5 listdir(path)
os.listdir(path)
listdir(path) 返回一个列表,列表中包括 path 路径下的所有文件和目录,但是不包括“.”和“..”目录。
listdir()返回的列表是未排序的。
2.6 mkdirs(path, mode), mkdir(path, mode)
os.mkdirs(path, mode=0777)
os.mkdir(path, mode=0777)
创建一个目录,此时 path 可能涉及多级目录,mkdirs会创建沿路所有尚不存在的目录,然后设置访问权限;而 mkdir()只创建 path 最右端的 基地址,基地址前面如果存在尚未创建的目录,mkdir()会抛出异常OSError。
创建失败时两个函数都抛出OSError,当指定的路径已经存在时也抛出相同的异常。
2.7 remove(path), unlink(path)
os.remove(path)
os.unlink(path)
这两个函数删除 path 指定的文件。
2.8 removedirs(path)
os.removedirs(path)
把 path 中经过的所有目录(要求是空的目录)都删除。
2.9 rmdir(path)
os.rmdir(path)
删除 path 指定的目录(要求目录为空),删除失败时抛出OSError,例如删除的目录非空。
2.10 rename(src, dest)
os.rename(src, dest)
将文件或目录 src 重命名为 dest。
2.11 renames(src, dest)
os.renames(src, dest)
重命名,但是重命名的过程中会自动创建参数 dest 中所有的尚不存在的中间路径,重命名后会删除 src 中包含的空目录。
2.12 stat(path)
os.stat(path)
返回一个 stat_result 类型的值,例如:
 >>> mode = os.stat("test1.py")
 >>> type(mode)
 <type 'nt.stat_result'>
 >>>
 >>> mode
 nt.stat_result(st_mode=33206, st_ino=0L, st_dev=0, st_nlink=0, st_uid=0, st_gid=
 0, st_size=22L, st_atime=1439467351L, st_mtime=1439543082L, st_ctime=1439467351L
 )
可以看到stat()函数返回的 stat_result 对象的类型及一些信息,该对象提供了 10 种关于参数 path 的信息,可以通过对应的属性访问这些信息,例如查看文件的大小:
1 >>> os.path.getsize('test1.py')
2 0L
3 >>> os.stat('test1.py').st_size
4 0L
这10种关于文件、目录的信息及其对应的属性名称分别为:
| 属性名 | 含义 | 
| st_mode | 访问控制与其他模式位 | 
| st_ino | I节点的序号 | 
| st_dev | 设备号 | 
| st_nlink | 硬链接数 | 
| st_uid | 属主的UID | 
| st_gid | 属主的GID | 
| st_size | 大小(单位:字节) | 
| st_atime | 最后访问时间(自epoch以来的秒数) | 
| st_mtime | 最后修改时间 | 
| st_ctime | 最后一次状态改变的时间 | 
2.13 utime(path, times)
os.utime(path, times=None)
设置文件的最后访问和最后修改时间,
- 如果 times 是None,则utime()使用当前的时间;
 - 如果 times 不为None,则 times 必须是一个二元组——(accessed, modified),即指定最后访问和修改的时间,这里这两个值都要是自 epoch 以来的秒数。
 
2.14 walk(top, topdown, onerror)
os.walk(top, topdown=True, onerror=None)
首先,这个函数是一个生成器!用来遍历参数 top 指定的目录
- 当参数 topdown 为True(默认情形)时,从 top 向其子目录遍历
 - 当参数 topdown 为False时,倒序从 top 目录树的叶节点开始,反向遍历
 
参数 onerror :
- 如果是None,则walk()忽略遍历过程中遇到的一切OSError异常
 - 否则必须是一个函数,以异常OSError的实例为唯一的参数,一旦walk()遇到异常,就将其传递给 onerror()函数,onerror()可以自由定义。
 
walk() 每次生成的 item 都是一个三元组——(dirpath, dirnames, filenames),其中:
- dirpath:当前遍历到的目录的名称;
 - dirnames:列表,包含当前目录的所有直接子目录名(不包括 "." 和 "..");
 - filenames:列表,包含当前目录中的所有文件名;
 
例:
import os
for dirpath, dirnames, filenames in os.walk("d:\\programs"):
dirnames[:] = [ d for d in dirnames if not d.startswith('.') ]
for name in filenames:
print os.path.join(dirpath, name)
该例子将会打印出”d:\\programs“目录下,所有不以 “.” 开头的目录中的所有文件,
注意在 topdown 为True时,遍历到一层目录时,修改生成得到的dirnames列表,可以影响下一层将要遍历的子目录个数和顺序,比如这里就在遍历时剔除了以“.”开头的目录。
(原创)Python文件与文件系统系列(2)——os模块对文件、文件系统操作的支持的更多相关文章
- 【python基础语法】OS模块处理文件绝对路径,内置的异常类型、捕获、处理(第9天课堂笔记)
		
import os """ 通过文件的路径去打开文件 相对路径:相对当前的工作路径去定位文件位置 .:代表当前路径 ..:代表上一级路径(父级路径) 绝对路径:相对于电脑 ...
 - 原创】Java并发编程系列2:线程概念与基础操作
		
[原创]Java并发编程系列2:线程概念与基础操作 伟大的理想只有经过忘我的斗争和牺牲才能胜利实现. 本篇为[Dali王的技术博客]Java并发编程系列第二篇,讲讲有关线程的那些事儿.主要内容是如下这 ...
 - Python基础总结之第九天开始【python之OS模块对目录的操作、以及操作文件】(新手可相互督促)
		
年薪20万的梦想... python对文件.目录能做什么?或者说我们需要python替我们做什么?最经常的操作就是对文件的:打开.关闭.读取.写入.修改.保存等等对目录的操作,无非就是 ...
 - Python正则表达式re模块和os模块实现文件搜索模式匹配
		
☞ ░ 前往老猿Python博文目录 ░ 因测试需要,需要提供一个可以指定目录搜索符合条件的文件名函数,搜索时可以通过*(星号)匹配0-n个字符,?(问号)匹配任意1个字符,可以指定多个文件类型,每个 ...
 - Python os模块之文件操作
		
基本概念:C:\\haoguo.txt 路径: C:\\ 文件名: haoguo 后缀名:.txt 1. 文件名与后缀分离 2. 路径与文件分离 3. 获取当前路径 4. 文件名与后缀合并 5. 路径 ...
 - python 之 序列化与反序列化、os模块
		
6.6 序列化与反序列化 特殊的字符串 , 只有:int / str / list / dict 最外层必须是列表或字典,如果包含字符串,必须是双引号"". 序列化:将Python ...
 - os模块、文件压缩 、匹配文件后缀名:fnmatch glob
		
一.os模块 os模块:是python是系统交互的模块 import os # 0平台信息的一些操作 python是夸平台的,所以内部兼容了不同的平台 1. os.name # 操作系统 nt是win ...
 - python学习第五十一天os模块的用法
		
os模块故名思意就是操作系统模块,该模块提供很多容许你的程序与操作系统直接交互的功能. 1,得到当前工作目录 os.getcwd() 2, 返回指定目录下的所有文件和目录名 os.listdir() ...
 - python学习笔记:sys、os模块
		
os模块:负责程序与操作系统的交互,提供了访问操作系统底层的接口; sys模块:负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境. --os 常用方法-- ...
 
随机推荐
- Fedora和Ubuntu下安装OpenGL开发环境配置
			
Fedora下OpenGl开发环境配置 开发OpenGL工程需要3个库文件和对应的头文件: libglut.so,libGLU.so,libGL.so, gl.h ,glu.h, glut.h 这些库 ...
 - 【BZOJ-2843&1180】极地旅行社&OTOCI   Link-Cut-Tree
			
2843: 极地旅行社 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 323 Solved: 218[Submit][Status][Discuss ...
 - codevs1225 八数码难题
			
题目描述 Description Yours和zero在研究A*启发式算法.拿到一道经典的A*问题,但是他们不会做,请你帮他们.问题描述 在 3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数 ...
 - C#文件复制功能
			
目的是将用户自定义文件复制到指定文件夹并且能查看该文件,下面是个人做的源码: sing System; using System.Collections.Generic; using System.C ...
 - python包的概念
			
1 python程序由包(package).模块(module)和函数组成.包是由一系列模块组成的集合.模块是处理某一类问题的函数和类的集合. 2 包就是一个完成特定任务的工具箱. 3 包必须含有一个 ...
 - eclipse中新建python项目报错:Project interpreter not specified
			
eclipse-windows-preferences-python
 - Mac上的终端(Terminal)启动缓慢
			
最近重装10.9系统,装完后,发现终端(Terminal)启动之前1秒都不用,现在却需要5-10秒,搜寻了下,发现是终端的统日志导致的问题,只需要执行下下面的命令,终端就又身轻如燕了! sudo rm ...
 - FluentData,它是一个轻量级框架,关注性能和易用性。
			
http://www.cnblogs.com/zengxiangzhan/p/3250105.html FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.M ...
 - DedeCMS全版本通杀SQL注入漏洞利用代码
			
EXP: Exp:plus/recommend.php?action=&aid=1&_FILES[type][tmp_name]=\' or mid=@`\'` /*!50000u ...
 - struts2 访问国际化资源 <s:text>作为属性
			
保留全局级国际化信息资源文件.并在message.properteis中增加一个带有参数的国际化信息. labela = labela in zh_CN labelb = labelb,{0} < ...