上一篇文章介绍了Python中文件的基本操作,这次我们来介绍与Python的文件相关的一些十分有用的模块。其实我们写的每一个源代码文件(*.py)都是一个模块。Python自身带有非常多实用的模块,在日常编程中,如果能用上它们,则事半功倍。
首先来介绍OS模块,OS其实就是Operator System的缩写,即操作系统。对于文件系统的访问,Python一般都是通过OS模块来实现的。我们所知道常用的操作系统就有Windows、Mac OS、Linux等,这些操作系统底层对于文件系统的访问工作原理是不一样的,如果要针对不同的操作系统来考虑使用哪些文件系统模块时非常麻烦的,当程序运行环境一旦改变,就要相应的去修改大量的代码。
但是,Python作为跨平台语言,其同样的源代码在不同的操作系统下不需要修改就可以同样实现,有了OS模块,就不需要关心什么操作系统下使用什么模块,OS模块会帮你选择正确的模块并调用。
首先先给出一些常用的函数使用方法:
| 函数名 | 使用方法 |
|---|---|
| getcwd() | 返回当前工作目录 |
| chdir(path) | 改变工作目录 |
| listdir(path = ‘.’) | 列举指定目录中的文件名('.‘表示当前目录,’..'表示上一级目录) |
| mkdir(path) | 创建单层目录,如该目录已存在则抛出异常 |
| makedirs(path) | 递归创建多层目录,如果该目录已存在则抛出异常,注意:‘E:\a\b’ 和 ‘E:\a\c’ 并不会冲突 |
| remove(path) | 删除文件 |
| rmdir(path) | 删除单层目录,如果该目录非空则抛出异常 |
| removedirs(path) | 递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常 |
| rename(old, new) | 将文件old重命名为new |
| system(command) | 运行系统的shell命令 |
以下是支持路径操作中常用到的一些定义,支持所有平台
| 使用方法 | |
|---|---|
| os.curdir | 指代当前目录(‘.’) |
| os.pardir | 指代上一级目录(‘…’) |
| os.sep | 输出操作系统特定的路径分隔符(在Windows下为’\\‘,在Linux下为’/') |
| os.linesep | 当前平台使用的行终止符(在Windows下为’\r\n’,在Linux下为’\n’) |
| os.name | 指代当前使用的操作系统(包括’posix’、‘nt’、‘mac’、‘os2’、‘ce’、‘java’) |
有些情况下我们需要获得应用程序当前的工作目录(比如要保存临时文件),那么可以使用getcwd()获得:

用chdir()函数可以改变当前工作目录,比如可以切换到D盘:

有时候你可能需要知道当前目录下有哪些文件和子目录,那么listdir()函数可以帮你列举出来。
path参数用于指定列举的目录,默认值是’.',代表根目录,也可以使用’..',代表上一层目录:

mkdir()函数用于创建文件夹,如果该文件夹存在,则抛出FileExistsError异常:

makedirs()函数可以用于创建多层目录:

效果如下图所示:

remove()函数用于删除指定的文件,注意是删除文件,不是删除目录。
rmdir()函数用于删除目录;如果要删除多层目录,则用removedirs()函数。

其工作目录结构如下:a\b\c, b\, test.txt

rename()函数用于重命名文件或文件夹:

几乎每个操作系统都会提供一些小工具,system()函数用于使用这些小工具。

回车后即弹出计算器,如下图所示:

walk()函数的作用是遍历top参数指定路径下的所有子目录,并将结果返回一个三元组(路径,[包含目录],[包含文件])。举个例子:

其结构如下图所示:

另外,path模块还提供了一些很实用的定义,分别是:
os.path模块可以完成一些针对路径名的操作,首先给出常用到的函数使用方法:
| 函数名 | 使用方法 |
|---|---|
| basename(path) | 去掉目录路径,单独返回文件名 |
| dirname(path) | 去掉文件名,单独返回目录路径 |
| join(path1[, path2[, …]]) | 将path1和path2各部分组合成一个路径名 |
| split(path) | 分割文件名与路径,返回(f_path, f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在 |
| splitext(path) | 分离文件名与扩展名,返回(f_path, f_extension)元组 |
| getsize(file) | 返回指定文件的尺寸,单位是字节 |
| getatime(file) | 返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) |
| getctime(file) | 返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) |
| getmtime(file) | 返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) |
以下函数均返回True或者False。
| 函数名 | 使用方法 |
|---|---|
| exists(path) | 判断指定路径(目录或文件)是否存在 |
| isabs(path) | 判断指定路径是否为绝对路径 |
| isdir(path) | 判断路径是否存在且是一个目录 |
| isfile(path) | 判断路径是否存在且是一个文件 |
| islink(path) | 判断路径是否存在且是一个符号链接 |
| ismount(path) | 判断路径是否存在且是一个挂载点 |
| samefile(path1, path2) | 判断path1和path2两个路径是否指向同一个文件 |
basename()和dirname()函数分别用于获取文件名和路径名:

join()函数跟BIF的那个join()函数不同,os.path.join()是用于将路径名和文件名组合成一个完整的路径:

split()和splitext()函数都用于分割路径,split()函数分割路径和文件名(如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在);splitext()函数用于分割文件名和扩展名:

getsize()函数用于获取文件的尺寸,返回值是以字节为单位:

getatime()、getctime()和getmtime()分别用于获得文件的最近访问时间、创建时间和修改时间,不过返回值是浮点型秒数,可用time模块的gmtime()或localtime()函数换算。
