os模块除了提供使用操作系统功能和访问文件系统的简便方法之外,还提供了大量文件与文件夹操作的方法,如下表所示。
方法 | 功能说明 |
access(path,mode) | 按照 mode 指定的权限访问文件 |
chdir(path) | 把 path 设置为当前工作目录 |
chmod(path,mode,*,dir_fd=None,follow_symlinks=True) | 改变文件的访问权限 |
extsep | 当前操作系统所使用的文件扩展名分隔符 |
fstat(path) | 返回打开的文件的所有属性 |
get_exec_path() | 返回可执行文件的搜索路径 |
getcwd() | 返回当前的工作目录 |
listdir(path) | 返回path目录下的文件和目录列表 |
mkdir(path[,mode=0777]) | 创建目录 |
makedirs(path1/path2/...,mode=551) | 创建多级目录 |
open(path,flags,mode=0o777,*,dir_fd=None) | 按照mode指定的权限打开文件,默认权限为可读、可写、可执行 |
rmdir(path) | 删除目录,目录中不能有文件或子文件夹 |
remove(path) | 删除指定的文件 |
removedirs(path1/path2...) | 删除多级目录,目录中不能有文件 |
rename(src,dst) | 重命名文件或目录,可实现文件的移动 |
scandir(path='.') | 返回包含指定文件夹中所有DirEntry对象的迭代对象 |
sep | 当前操作系统所使用的路径分隔符 |
startfile(filepath[,operation]) | 使用关联的应用程序打开指定文件或启动指定应用程序 |
stat(path) | 返回文件的所有属性 |
truncate(path,length) | 将文件截断,只保留指定的长度 |
walk(top,topdown=True,onerror=None) | 遍历目录树,该方法返回一个元组,包含3个元素:所有路径名、所有目录列表与文件列表 |
write(fd,data) | 将 bytes 对象 data 写入文件fd |
os.path模块提供了大量用于路径判断、切分、连接以及文件夹遍历的方法,如下表所示。
方法 | 功能说明 |
abspath(path) | 返回给定路径的绝对路径 |
basename(path) | 返回指定路径的最后一个组成部分 |
commonpath(paths) | 返回戈丁的多个路径的最长公共路径 |
commonprefix(paths) | 返回给定的多个路径的最长公共前缀 |
dirname(p) | 返回给定路径的文件夹部分 |
exists(path) | 判断文件是否存在 |
getatime(filename) | 返回文件的最后访问时间 |
getctime(filename) | 返回文件的最后创建时间 |
getmtime(filename) | 返回文件的最后修改时间 |
getsize(filename) | 返回文件的大小 |
isabs(path) | 判断path是否为绝对路径 |
isdir(path) | 判断path是否为文件夹 |
isfile(path) | 判断path是否为文件 |
join(path,* paths) | 连接两个或多个path |
split(path) | 对绝对路径进行分割,以列表形式返回 |
splitest(path) | 从路径中分隔文件的扩展名 |
splitdrive(path) | 从路径中分隔出驱动器的名称 |
shutil模块也提供了大量的方法支持文件和文件夹的操作,常用方法如下表所示。
方法 | 功能说明 |
copyfile(src,dst) | 复制文件 |
copytree(src,dst) | 递归复制文件夹 |
disk_usage(path) | 查看磁盘使用情况 |
move(src,dst) | 移动文件或递归移动文件夹 |
rmtree(path) | 递归删除文件夹 |
make_archive(base_name,format,root_dir=None,base_dir=None) | 创建tar或zip格式的压缩文件 |
unpack_archive(filename,extract_dir = None,format = None) | 解压缩文件 |
下面通过几个示例来演示os、os.path 以及 shutil 模块的基本用法。
1 import os 2 import os.path as op 3
4 print(op.basename(r'C:\windows\notepad.exe')) #获取路径的最后一个组成部分
5 #notepad.exe
6
7 print(op.exists(r'test1.txt')) #测试文件是否存在
8 #notepad.exe
9
10 #----------------------------------------------
11 #os.rename(r'C:\test1.txt',r'C:\test2.txt') #源文件不存在,重命名失败
12 '''
13 Traceback (most recent call last): 14 File "C:/Users/dddd/AppData/Local/Programs/Python/Python35/test1.py", line 10, in <module> 15 os.rename(r'C:\test1.txt',r'C:\test2.txt') #源文件不存在,重命名失败 16 FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'C:\\test1.txt' -> 'C:\\test2.txt' 17 '''
18 #----------------------------------------------
19
20 #os.rename(r'C:\Users\dddd\AppData\Local\Programs\Python\Python35\infomation.txt','C:\\infomation.txt') #os.rename() 可实现文件的改名和移动
21 #这里区分是移动还是改名就看是不是在同一个路径下,是则为改名,否则为移动
22
23 print(op.exists('C:\\infomation.txt')) 24 #True
25
26 #返回路径的文件夹名
27 path = r'D:\mypython_exp\new_test.txt'
28 print(os.path.dirname(path)) #D:\mypython_exp
29
30 #返回文件名
31 print(os.path.basename(path)) #new_test.txt
32
33 #切分文件路径和文件名
34 print(os.path.split(path)) #('D:\\mypython_exp', 'new_test.txt')
35
36 print(os.path.splitdrive(path)) #('D:', '\\mypython_exp\\new_test.txt')
37
38 #切分文件拓展名
39 print(os.path.splitext(path)) #('D:\\mypython_exp\\new_test', '.txt')
40
41 #获取当前工作目录下的 拓展名为.py的文件
42 print([fname for fname in os.listdir(os.getcwd()) if os.path.isfile(fname) and fname.endswith('.py')]) 43 #['BinaryTree.py', 'demo.py', 'demo_new.py', 'MyArray.py', 'myQueue.py', 'simNumpyArray.py', 'Stack.py', 'test.py', 'test1.py']
44
45 #返回当前工作目录
46 print(os.getcwd()) #C:\Users\...\Programs\Python\Python35
47
48 #在当前工作目录下创建子目录
49 #print(os.mkdir(os.getcwd() + r'\pyfile'))
50
51 #把当前工作目录切换到pyfile目录下
52 os.chdir(os.getcwd() + r'\pyfile') 53
54 #返回\pyfile目录下的文件
55 print(os.listdir(os.getcwd())) #因为这个目录刚创建,还没有文件,所以返回空列表 []
56
57 #当前目录还可以用 . 表示 上级目录可以用 .. 表示,,这是相对路径
58 print(os.listdir('.')) #[]
59 print(os.listdir('..')) #['.idea', 'BinaryTree.py', ...,]
60
61 #在 pyfile目录下再创建一个目录
62 #os.mkdir('aa')
63
64 #删除刚才创建的目录
65 #os.rmdir('aa')
66
67
68 print(os.path.commonpath([r'C:\windows\notepad.exe',r'C:\windows\system'])) #C:\windows
69 print(os.path.commonprefix([r'a\b\c\d',r'a\b\c\e'])) #a\b\c\
1 import shutil 2
3 #shutil.copyfile(r'C:\infomation.txt','C:\\Users\\dddd\\AppData\\Local\\Programs\\Python\\Python35\infomation.txt') #OK了,复制过来了
4
5 #将某个文件夹及该文件夹中所有文件压缩至 当前目录下的 a.zip
6 #shutil.make_archive('.\\a','zip','.','a') #OK了,压缩成功了。
7
8 #将刚才的压缩文件解压至 .\aa文件夹下
9 shutil.unpack_archive('.\a.zip','.\aa')