(原创)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 常用方法-- ...
随机推荐
- BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘
2326: [HNOI2011]数学作业 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1564 Solved: 910 [Submit][Statu ...
- CSS设置技巧
一.单位和值 1.1 颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令 ...
- 【poj1201】 Intervals
http://poj.org/problem?id=1201 (题目链接) 题意 给出n个区间${[ai,bi]}$,要求选出尽可能少的数,使得每个区间i中至少存在${c[i]}$个数. Soluti ...
- 【codevs1257】 打砖块
http://codevs.cn/problem/1257/ (题目链接) 题意 在等腰三角形上打砖块,总共有m发炮弹,每块砖有一个权值,求打出的最大权值 Solution 今天考试题,考场上的2个小 ...
- 洛谷P1130 红牌
题目描述 某地临时居民想获得长期居住权就必须申请拿到红牌.获得红牌的过程是相当复杂 ,一共包括N个步骤.每一步骤都由政府的某个工作人员负责检查你所提交的材料是否符合条件.为了加快进程,每一步政府都派了 ...
- Android Studio学习笔记
转:http://stormzhang.com/devtools/2014/11/25/android-studio-tutorial1 背景 相信大家对Android Studio已经不陌生了,An ...
- WWDC2014总结---For产品经理们
一年一度的苹果开发者大会WWDC2014,在北京时间6月3日凌晨1点开始了,苹果发布了iOS8.OSX10.10等,苹果比以前更加开放了,网上东西很多很杂,但缺少从产品开发角度来梳理的文章. 我根据这 ...
- java中静态属性和和静态方法的继承问题 以及多态的实质
首先结论是:java中静态属性和和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成的,不需继承机制就可以调用如果子类里 ...
- KxMenu下拉菜单
+ (void)createMenu:(id)sender target:(UIViewController *)t { NSArray *menuItems = @[ [KxMenuItem men ...
- css absolute与relative的区别
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...