• os模块,os.path模块,subprocess模块,configparser模块,shutil模块


    1.os模块

    os表示操作系统
    该模块主要用来处理与操作系统相关的操作
    最常用的文件操作
    打开 读入 写入 删除 复制 重命名

    os.getcwd() 获取当前执行文件所在的文件夹路径
    os.chdir("dirname") 改变当前脚本工作目录
    os.curdir 返回当前目录的字符串表现方式: 结果('.')
    os.pardir 获取当前目录的父目录字符串名:结果('..')
    os.makedirs('a/b/c') 可生成多层递归目录,如果不存在,可以自动创建中间的目录
    os.mkdir('a/b/c') 生成单级目录,会把a,b当成已存在的路径,如果不存在就会报错
    os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
    os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;
    os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印,
    列表里面只是文件的名称.需要手动拼接其完整路径
    os.remove() 删除一个文件
    # 如果要删除一个文件夹 而且文件夹不为空 ,思路是 先遍历这个文件夹中的所有文件和文件夹
    # 先把里面的内容全部删除 最后再删除文件夹
    有一个文件夹a,里面包含了一个a.txt的文件
    path=r'E:python-li课堂day19a'
    for f in os.listdir('a'):#得到的f只是字符串类型的文件名
      f_path=path+'\'+'a.txt'#将其改为文件路径的格式
      print(f_path)
      os.remove(f_path)
    os.rmdir('a')

    os.rename("oldname","newname") 重命名文件/目录
    os.stat('path/filename') 获取文件/目录信息
    os.sep 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/",当你的程序需要跨平台时,路径分隔符不能直接写死要从os中获取
    os.linesep 输出当前平台使用的行终止符,win下为" ",Linux下为" "
    os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
    os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
    os.system("bash command") 运行shell命令(系统命令),直接显示它在执行系统指令时,也可以命令操作系统启动某个程序
    os.environ 获取系统环境变量

    什么时候使用os 当需要操作文件及文件夹的时候
    重点放在对文件的增删改查

    2.os.path模块

    path翻译为路径
    该模块用于处理路径
    之所以用这个模块是因为python的跨平台,各平台的路径书写方式不同,所以将所有与路径相关都进行了封装

    os.path.abspath(path) 返回path规范化的绝对路径,其实就是把当前文件所在的文件夹与你给的参数进行了拼接
    os.path.split(path) 将path分割成目录和文件名二元组返回
    os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
    os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素
    os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
    os.path.isabs(path) 如果path是绝对路径,返回True 依据:第一个字符是不是路径分割符合,是表示绝对路径
    print(os.path.isabs(r'E:python-li课堂day19')) 结果:True
    print(os.path.isabs(r'python-li课堂day19')) 结果:False
    os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
    os.path.isdir(path) 如果path是一个存在的文件夹,则返回True。否则返回False
    os.path.join(path1,path2) 以当前平台的路径分隔符来进行拼接.如果有多个盘符,取得是最后一个
    print(os.path.join('D:\','a')) 结果:D:a
    print(os.path.join('D:\','E:\','a')) 结果:E:a
    os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
    os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
    os.path.getsize(path) 返回path的大小

    #返回规范化路径 大写变成小写,反斜杠变成正斜杠
    print(os.path.normcase(r'E:python-li课堂/day19os模块.py'))
    结果:e:python-li课堂day19os模块.py

    # 规范化路径但大写不变小写 并且 会执行里面..(用于返回上一级目录)
    print(os.path.normpath(r'E:python-li\课堂//day19os模块.py..'))
    结果:E:python-li课堂day19
    print(os.path.normpath(r'E:python-li\课堂day19os模块.py....'))
    结果:E:python-li课堂

    #获取项目根目录
    import sys,os
    sys.path.append(os.path.dirname(os.path.dirname(__file__))

    总结:主要处理路径 不会关系路径是否存在 只是做拼接 剪切 转换等等操作
    通常是与os一起使用
    优点: 用它处理的路径是可以跨平台的

    3.subprocess模块

    # '''
    # subprocess 翻译为子进程
    # 进程指的是正在运行的程序
    # 子进程 是有另一个正在运行的程序启动的程序 例如:qq聊天 点击了一个连接 打开了浏览器 那么浏览器称之为qq的子进程
    # 为什么使用子进程?
    # 当我们有一个任务需要处理 而自己的程序无法处理 所以需要开启另一个程序
    # 在python中想要获取所有的进程(任务列表)信息
    # '''
    # import os
    # os.system(r"F:QQ2016BinQQScLauncher.exe")
    # os.system('dir')
    #它在执行系统指令时,也可以命令操作系统启动某个程序
    #os.system在执行时 直接把结果输出到了控制台 如果我们要获取执行的结果就无能为力了
    #subprocess不仅可以启动子进程,还能与子进程进行数据交互

    import subprocess
    #dir 表示要执行命令
    #shell 表示dir是一个命令
    #stout 指定输出的管道
    #管道是什么? 相当于生活中的水管 从一个地方流到另一个地方
    #在程序中,数据相当于水 管道的作用,就从一个进程中把数据输到另一个进程
    #本质是读写同一个文件
    # p = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE)
    # print(p.stdout.read())
    #读一次指针到达文件的末尾,再次读就没有数据

    #启动一个tasklist子进程,指定输出结果到管道中
    p1=subprocess.Popen('tasklist',shell=True,stdout=subprocess.PIPE)
    #启动一个findstr的子程序,将p1进程的结果作为p2进程输入
    p2=subprocess.Popen('findstr cmd', #要执行的指令
              shell=True, #第一个参数是否是一个指令
              stdin=p1.stdout, #指定输入管道
              stdout=subprocess.PIPE, #指定输出管道
              stderr=subprocess.PIPE)#表示错误管道,当进程执行出错时,可以在错误管道中获取结果
    #读取p2进程的结果
    print(p2.stdout.read())
    print(p2.stderr.read().decode('GBK'))


    #总结:当你需要在python中启动一个子进程,并且它进行数据交互时就是用subprocess
    #如果不需要数据交互可以使用 os.system

    4.configparser模块

    configparser,翻译为配置解析,很显然,它是用来解析配置文件的
    何为配置文件?
    用于编写程序的配置信息的文件
    何为配置信息?
    为了提高程序的扩展性,我们会把一些程序中需要用到的值交给用户来确定,比如迅雷的下载目录,同时下载数,qq的提示音等.
    作为配置信息的数据,应满足两个条件
    1.数据的值不是固定的
    2.可以由用户来指定
    例如:我们做一个登录功能,为了方便使用我们可以将用户的用户名密码写到配置文件中,可以不需要内次都输入

    配置文件编写格式
    配置文件中只允许出现两种类型的数据
    第一种 section分区 方括号中十分区的名称 例如[ATM]
    第二种 option选项 名称=值
    注意:
    不能出现重复的分区名
    同一分区下不能有相同的选项名

    在test.cfg中:
    #这是一个section(分区)
    [mysql]
    #这是一个option(选项)
    username = henry
    password = 123
    lock = false
    #注意分区名不能重复
    #同一个分区下 不能有重复option
    [django]

    在configparser模块中:
    import configparser
    #创建一个配置文件解析器
    cfg = configparser.ConfigParser()
    #读取名为test.cfg的配置文件
    cfg.read('test.cfg',encoding='utf-8')
    #获取分区
    print(cfg.sections())
    #获取某个分区下的某个选项,第一个参数分区名 第二个选项名
    username=cfg.get('mysql','username')
    print(username)
    print(type(username))

    password=cfg.get('mysql','password')
    print(password)
    print(type(password))

    lock=cfg.getboolean('mysql','lock')
    print(type(lock))
    print(lock)

    #以下三个类型
    cfg.getfloat()
    cfg.getint()
    cfg.getboolean()

    #读取配置信息 两步
    1.读取某个配置文件
    2.调用get函数

    configparser的增加修改删除

    #修改
    import configparser
    cfg=configparser.ConfigParser()
    cfg.read('test.cfg',encoding='utf-8')
    #将mysql分区下的lock值改为True
    cfg.set('mysql','lock','true')
    with open('test.cfg','wt',encoding='utf-8') as f:
    cfg.write(f)

    #增加
    import configparser
    cfg=configparser.ConfigParser()
    cfg.read('test.cfg',encoding='utf-8')
    #增加新分区
    cfg.add_section('新分区')
    #增加新选项port 值为 3306
    cfg.set('mysql','port','3306')
    with open('test.cfg','wt',encoding='utf-8') as f:
    cfg.write(f)

    #删除
    import configparser
    cfg=configparser.ConfigParser()
    cfg.read('test.cfg',encoding='utf-8')
    #删除分区
    cfg.remove_section('新分区')
    #删除某分区的选项
    cfg.remove_option('mysql','port')
    with open('test.cfg','wt',encoding='utf-8') as f :
    cfg.write(f)

    #判断是否存在某个分区
    print(cfg.has_section('mysql'))
    #判断是否存在某个选项
    print(cfg.has_option('mysql','username'))

    #作为配置文件 最常用的操作就是读取配置信息 很少会做修改
    #总结:
    read读取配置文件注意要写encoding
    add_section添加新分区
    set 如果没有这个选项则添加,有则修改
    remove_section 删除分区
    remove_option 删除选项

    5.shutil模块

    shutil模块是一个工具包,封装了文件高级操作,让你操作更方便

    功能与os有些重叠,os只能帮你处理文件是否存在,路径是否正确等,无法直接完成copy等操作,而shutil提供了压缩与解压缩
    import shutil
    #copy文件
    shutil.copyfile(r'E:python-li课堂day19os模块.py',
          r'E:python-li课堂day19os模块2.py')
    #压缩文件 支持的格式zip 和tar
    shutil.make_archive('day19','zip',r'E:python-li课堂')
    shutil.make_archive('os.path','tar',r'E:python-li课堂day19')
    #解压缩
    shutil.unpack_archive(r'E:python-li课堂day19day19.zip',
              r'E:python-li课堂day19day19解压的文件夹.zip'
              r'zip')
    总结:拷贝文件,压缩解压缩文件
    make_archive 中的第四个参数 base_dir 也是用来指定要压缩的路径,与root_dir的区别
    #root_dir 仅仅压缩指定的路径下的内容
    #base_dir 会将指定的路径下的内容 与其完整的文件层级一并压缩
    #当指定base_dir时root_dir不生效

  • 相关阅读:
    Mysql源代码分析系列(2): 源代码结构转载
    Python 元组、列表、字典、文件
    Mysql源代码分析系列(1): 编译和调试转载
    ETL测试参考文档
    MySql select into与set的区别
    STL container
    mysqlclient5.0.2614 RPM for ppc
    linux多线程的总结(pthread用法)
    给线程变量pthread_t *thread动态分配空间
    当SQL数据库日志文件已满,或者日志很大,怎么办
  • 原文地址:https://www.cnblogs.com/lizeqian1994/p/10104484.html
Copyright © 2020-2023  润新知