1.模块及功能
在Python中,实现目录操作的的模块是os和其子模块os.path。主要方法如下表
方法 | 说明 |
getcwd() | 获取当前目录 |
listdir() | 返回指定路径下文件和目录 |
mkdir() | 创建目录 |
makedirs() | 创建多级目录 |
rmdir() | 删除目录 |
removedirs() | 删除多级目录 |
chdir() | 把某个路径设置为当前工作目录 |
walk() | 遍历目录,返回元组(路径,所有目录列表,文件列表) |
方法 | 说明 |
abspath() | 获取绝对路径 |
exists() | 判断目录或文件是否存在 |
join() | 拼接路径 |
splitext() | 分离文件名和扩展名 |
basename() | 从一个目录中提取文件名 |
dirname() | 从一个路径中提取文件路径(不包含文件名) |
isdir() | 判断是否是有效路径 |
2.使用
(1)路径的3种写法
- # 不转义右斜线
- route = r'D:\Python\test.py'
- # \\表示\
- route2 = 'D:\\Python\\test.py'
- # 使用左斜线
- route3 = 'D:/Python/test.py'
(2)工作路径、绝对路径和相对路径
①工作路径就是某个运行py文件的所在路径
- import os
- print('当前工作路径:', os.getcwd())
-
-
- # 当前工作路径: D:\Python
②绝对路径就是不依赖工作路径,也可以简单理解为完整路径
- print('日志文件的绝对路径:', os.path.abspath('log.txt'))
-
-
- # 输出:日志文件的绝对路径: D:\Python\log.txt
③相对路径就是相对当前工作路径的路径
比如我们某个项目的代码都放在py文件夹,日志在log文件夹。那么要打开log文件夹里的log.txt就可以使用相对路径。
- with open('../log/log.txt', 'a') as f:
- f.write('xxx')
(3)拼接路径
①路径其实也是一个字符串,因此可以直接使用字符串的拼接
route = 'D:/python' + '/log/log.txt'
②使用字符串拼接必须注意合并后是一个完整路径,在实际使用中往往不是多一个斜线就是少一个斜线,因此,使用os提供的拼接功能可以避免这个问题。
route = os.path.join('D:/python', 'log/log.txt')
(4)判断目录是否存在,创建目录
①这两个操作往往一起使用,目录存在进行下一步,不存在则创建
- log_dir = 'D:/python/log'
- # 判断目录是否存在
- if not os.path.exists(log_dir):
- # 创建目录
- os.mkdir(log_dir)
②创建多级目录(就是新建目录里再新建目录)
os.makedirs('测试/test')
(5)删除目录(被删除的目录必须为空)
- path = '测试/test'
- if os.path.exists(path):
- os.rmdir(path)
如果想删除不为空的目录,要使用shutil模块
- import shutil
- import os
- path = '测试/test'
- if os.path.exists(path):
- # 删除非空目录
- shutil.rmtree(path)
(6)遍历目录
①os.walk
递归的方式返回每一个目录的(根目录,文件夹列表,文件列表),walk方法不适用macos
- import os
- route = 'D:/python'
- for r in os.walk(route):
- print(r)
-
-
- # 输出:('D:\\python', ['data', 'log', 'py'], [])
- # ('D:\\python\\data', [], ['01.xlsx', '02.xlsx'])
- # ('D:\\python\\log', [], ['log.txt'])
- # ('D:\\python\\py', [], ['test.py'])
实际我们使用时,会对元组进行拆包,比如要获取指定目录下全部文件
- route = 'D:/python'
- for root, dirs, files in os.walk(route):
- for file in files:
- print(file)
-
-
- # 输出:01.xlsx
- # 02.xlsx
- # log.txt
- # test.py
②os.listdir,返回指定路径下所有文件夹
- route = 'D:/python'
- print(os.listdir(route))
-
-
- # 输出:['data', 'log', 'py']