95%测试人必掌握的常用Python OS模块,绝了,谁用谁知道!
1、返回文件路径
os.path.dirname(__file__)
返回当前运行文件所在目录的绝对路径os.getcwd()
返回当前进程的工作目录
2、返回指定文件的绝对路径
os.path.abspath(path)
import os
print(os.path.abspath('demo01.py'))
输出:D:\ningMengClass\demoProiect01\day01\demo01.py
3、路径拼接
os.path.join(path1[, path2[, ...]])
说明
Windows :以 \ 开头会被认为是绝对路径
Linux、Mac:以 / 开头会被认为是绝对路径 各个路径都不是绝对路径,路径拼接过程中 os.path.join()函数会自动加上 \
不显示添加 \
import os
print(os.path.join('api','test','login.html'))
输出:api\test\login.html显示添加 \
import os
print(os.path.join('api\','test\','login'))
输出:api\test\login.html各个路径有一个是绝对路径 \
一个路径是绝对路径,从绝对路径开始拼接,前面的舍弃
import os
print(os.path.join('api','\test','login.html'))
输出:\test\login.html多个路径是绝对路径,直接从最后一个绝对路径开始拼接
import os
print(os.path.join('\api','\test','login.html'))
输出:\test\login.html如果最后一个路径为空(空格),则生成的路径以一个 \ 分隔符结尾
import os
print(os.path.join('api','test','login.html',''))
输出:api\test\login.html\注意点
\ 为特殊字符需要进行转义处理
4、目录创建
os.mkdir(path[, mode])
path:要创建的目录,最后一个目录是需要创建的目录名称,可以是相对或者绝对路径
mode:要为目录设置的权限数字模式,windows 下忽略 mode 参数,使用默认就好
如果目录有多级,则创建最后一级,如果最后一级目录的上级目录有不存在的,则会抛出一个 OSError
import os
# 创建 testDir 目录
os.mkdir(os.path.join(os.getcwd(),'testDir'))
5、目录切换
os.chdir(path)
import os
os.chdir('D:/ningmengban/demoProject/testDir')
print(os.getcwd())
输出:D:/ningmengban/demoProject/testDir
6、目录切换
os.chdir(path)
将当前工作路径切换到指定路径下
import os
os.chdir('D:/ningmengban/demoProject/testDir')
print(os.getcwd())
输出:D:/ningmengban/demoProject/testDir
7、目录删除
os.rmdir(path)
删除 path 指定的【空目录】,如果目录非空,则抛出一个 OSError 异常
import os
#删除testDir目录
os.rmdir(os.path.join(os.getcwd(),'testDir'))
8、目录查询
os.listdir(path)
返回 path 指定的文件夹中的【文件】和【目录】列表
import os
print(os.listdir(os.getcwd()))
9、判断相关
os.path.isdir(path)
判断路径是否为目录,返回布尔值
import os
print(os.path.isdir(os.getcwd()))os.path.isfile(path)
判断路径是否为文件,返回布尔值
import os
print(os.path.isfile(os.getcwd()))
10、目录树生成器
os.walk(top,topdown=True,onerror=None,followlinks=False)
根据 top 参数,生成每一个目录下(包含它自己)下的文件绝对路径、目录名称、文件名称
返回格式:(dirpath, [dirname1,dirname2,dirname3,],[filename1,filename2,filename3)] 参数
默认 topdown=True:从最上层目录开始返回,则从上到下扫描目录
topdown 未指定:从上到下扫描目录
默认 topdown=False:自下而上扫描目录
top:目录路径
topdown=True:设置返回参数的顺序
onerror=None
followlinks=False:如果设置为 true,则访问符号链接指向的目录 注意点
返回值按照目录路径、目录名称、文件名称顺序返回,如果有一项没有就返回空列表 演示(你可以随意创建多层目录,包含文件,目录即可)
import os
#topdown=True
for filename in os.walk(top=r'D:\testDir',topdown=True):
print(filename)
输出:
('D:\\testDir', ['dir1', 'dir2', 'dir3'], ['t0.txt'])
('D:\\testDir\\dir1', ['dir11'], ['t1.txt'])
('D:\\testDir\\dir1\\dir11', [], ['t11.txt'])
('D:\\testDir\\dir2', ['dir22'], ['t2.txt'])
('D:\\testDir\\dir2\\dir22', [], ['t22.txt'])
('D:\\testDir\\dir3', ['dir33'], ['t3.txt'])
('D:\\testDir\\dir3\\dir33', [], ['t33.txt'])
#topdown=False
for filename in os.walk(top=r'D:\testDir',topdown=False):
print(filename)
输出:
('D:\\testDir\\dir1\\dir11', [], ['t11.txt'])
('D:\\testDir\\dir1', ['dir11'], ['t1.txt'])
('D:\\testDir\\dir2\\dir22', [], ['t22.txt'])
('D:\\testDir\\dir2', ['dir22'], ['t2.txt'])
('D:\\testDir\\dir3\\dir33', [], ['t33.txt'])
('D:\\testDir\\dir3', ['dir33'], ['t3.txt'])
('D:\\testDir', ['dir1', 'dir2', 'dir3'], ['t0.txt'])
#分别输出
for dir_path,dir_name,file_name in os.walk(top=r'D:\testDir',topdown=False):
print(dir_path)
print(dir_name)
print(file_name)
输出:
D:\testDir\dir1\dir11
[]
['t11.txt']
D:\testDir\dir1
['dir11']
['t1.txt']
D:\testDir\dir2\dir22
[]
['t22.txt']
D:\testDir\dir2
['dir22']
['t2.txt']
D:\testDir\dir3\dir33
[]
['t33.txt']
D:\testDir\dir3
['dir33']
['t3.txt']
D:\testDir
['dir1', 'dir2', 'dir3']
['t0.txt']