95%测试人必掌握的常用Python OS模块,绝了,谁用谁知道!

发布于 更新于

技术文章

1、返回文件路径os.path.dirname(__file__)返回当前运行文件所在目录的绝对路径os.getcwd()返回当前进程的工作目录2、返回指定文件的绝对路径os.path.abspath(path)import osprint...

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']




继续阅读