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


    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))
    print(int(password))


    # lock = cfg.get("mysql","lock")
    # print(lock)
    # print(type(lock))
    #
    # print(bool(lock))

    #
    # lock = cfg.getboolean("mysql","lock")
    # print(type(lock))
    # print(lock)

    # 以下三个函数是帮你封装了 类型转换
    # cfg.getfloat()
    # cfg.getint()
    # cfg.getboolean()


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




    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)


    # # 添加新的选项 port 值为3306
    # 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)

    # 删除
    cfg = configparser.ConfigParser()
    cfg.read("test.cfg",encoding="utf-8")

    # 删除分区
    cfg.remove_section("新分区")
    # 删除某个分区的选项
    cfg.remove_option("mysql","port")

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


    with open("test.cfg","wt",encoding="UTF-8") as f:
    cfg.write(f)



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


    # 请使用配置文件记录登录用户名和密码 下次登录时直接读取配置文件
    # 在进行登录前 先判断是否存在用户名和密码在配置文件中
    # 如果有则读取配置文件并登录
    # 如果没有则正常输入用户名和密码 登录成功时将用户名和密码写入配置文件


    os:


    import os

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



    """
    # 当前执行文件所在的文件夹路径
    # print(os.getcwd())

    # 修改当前的工作目录
    # os.chdir(r"D:脱产5期内容day19")



    # 获取当前目录的 字符串表现方式 .
    # print(os.curdir)
    # 获取当前目录的 字符串表现方式 ..
    # print(os.pardir)

    # 创建多级目录 可以自动创建中间的目录 如果不存在
    # os.makedirs("a/b/c")
    # 只能创建单级目录 会把c1和a1当成已存在的路径
    # os.mkdir("c1/a1/b1")


    # 删除文件夹 必须保证文件夹是空的 才能删除
    # os.rmdir("a")


    # 如果要删除一个文件夹 而且文件夹不为空 ,思路是 先遍历这个文件夹中的所有文件 和文件夹
    # 先把里面的内容全部删除 最后再删除文件夹

    # os.rmdir("b")



    # 要删除的文件路径
    # path = r"D:脱产5期内容day19"
    #
    # for f in os.listdir("b"):
    # f_path = path + "\" + f
    # os.remove(f_path)
    #
    # os.rmdir("b")
    #注意遍历删除文件时 listdir 得到的是文件名称 需要手动拼接完整路径


    # 作业 递归删除文件



    # print(os.stat("os模块.py"))


    # 获取当前的路径分割符 当你的程序要跨平台时 路径分隔符不能直接写死 要从os中获取,
    # 因为每个平台不同
    # print(os.sep)

    # 获取换行符
    # print(os.linesep)

    # 执行系统命令
    # print(os.system("dir"))


    # print(os.environ)


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








    import os

    """
    path 翻译为路径
    该模块用于处理路径
    之所有有这个模块 是因为python时跨平台的 各平台的路径书写方式不同,所以将所有与路径相关都进行了封装
    使用了path后 你的程序就是跨平台的 不会因为路径而产生错误



    """

    # 返回绝对路径 其实就是把当前执行文件所在的文件夹 与你给的参数做了拼接
    # print(os.path.abspath("path模块.py"))


    "a.b.c".split(".")



    # 将路径分割为文件夹和文件名
    # print(os.path.split(r"D:脱产5期内容day19path模块"))

    # 获取路径中的文件夹路径
    # print(os.path.dirname(r"D:脱产5期内容day19path模块path模块.py"))
    # 获取路径中的文件名称
    # print(os.path.basename(r"D:脱产5期内容day19path模块path模块.py"))


    # 判断一个路径是否存在
    # print(os.path.exists(r"D:脱产5期内容day19path模块path模块.py"))


    # 判断是否是绝对路径 依据是 第一个字符 是不是路径分割符合 是表示绝对路径
    # print(os.path.isabs(r"脱产5期内容day19path模块"))



    # 不是一个文件 必然是一个文件夹
    # 判断路径是否是一个文件
    # print(os.path.isfile(r"D:脱产5期内容day19path模块path模块.py"))
    #
    # # 判断路径是否是一个文件夹
    # print(os.path.isdir(r"D:脱产5期内容day19path模块path模块.py"))
    #
    #
    # # 以当前平台的路径分割符来拼接路径 如果有多个盘符 取得是最后一个
    # print(os.path.join("D:\","A:\","b"))
    #
    #
    # # 获取文件大小
    # print(os.path.getsize(r"D:脱产5期内容day19path模块path模块.py"))
    #
    # # 获取最后存取时间
    # print(os.path.getatime(r"D:脱产5期内容day19path模块path模块.py"))
    #
    # # 获取最后修改时间
    # print(os.path.getmtime(r"D:脱产5期内容day19path模块path模块.py"))



    # 返回规范化路径 大写变成小写,反斜杠变成正斜杠
    print(os.path.normcase(r"D:/脱产5期内容/day19/path模块/path模块.py"))


    # 把反斜杠 转为正斜杠 并且 会执行里面..(用于返回上一级目录)
    print(os.path.normpath(r"D:脱产5期内容/day19path模块........"))


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



    import sys,os

    # 添加环境变量
    sys.path.append(os.path.dirname(os.path.dirname(__file__)))


    # 导入配置文件
    from conf import settings

    # 访问配置文件中用户数据的路径
    print(settings.USERDATA_PATH)





    """
    shutil模块 是一个工具包,封装了文件高级操作,让你操作起来更方便
    功能与os有些重叠 ,os 只能帮你处理文件是否存在啊 路径是否正确等,
    无法直接完成copy等操作

    还提供了压缩与解压缩

    """

    import shutil
    # shutil.copyfile(r"D:脱产5期内容day19shutil模块shutil模块.py",r"D:脱产5期内容day19shutil模块shutil模块.py2")

    # 压缩文件 支持的格式 zip 和tar
    shutil.make_archive("shutil模块",
    "zip",
    r"D:脱产5期内容day19",
    "D:脱产5期内容day19这是压缩后的文件")


    # 解压缩
    # shutil.unpack_archive(r"shutil模块.zip",
    # r"D:脱产5期内容day19shutil模块解压的文件夹",
    # r"zip")


    # 总结: shutil模块在 copy文件 压缩文件时 使用











    """
    subprocess 翻译为子进程
    进程指的是 正在运行的程序
    子进程 是由另一个正在运行程序启动的程序 例如 qq聊天 点击了一个连接 打开了浏览器 那么浏览器称之为qq的子进程

    为什么使用子进程 ? 当我们有一个任务需要处理 而自己的程序无法处理 所以需要开启另一个程序

    例如 在python 想要获取所有的进程(任务列表)信息




    """


    # import os
    # # os.system(r'"D:Program Files (x86)TencentQQBinQQScLauncher.exe"')
    # res = os.system("dir")
    # print(res)
    # os.system 在执行系统指令时 也可以命令操作系统启动某个程序


    # os.system在执行时 直接把结果输出到了 控制台 如果我们要获取执行的结果 就无能为力了

    # subprocess 不仅可以启动子进程 还能与子进程进行数据交互

    import subprocess
    # dir 表示要执行命令
    # shell 表示dir是一个命令
    # stdout指定输出管道
    # 管道是什么? 相当于生活中的水管 水可以通过管道 从一个地方流到另一个地方
    # 在程序中 数据相当于水 管道的作用,就从一个进程中把数据传输到另一个进程
    # 本质上是读写同一个文件


    # p = subprocess.Popen("dir",shell=True,stdout=subprocess.PIPE)
    # print(p.stdout.read())
    # 上面代码是 启动了一个dir子进程 并将结果输出到指定管道



    # 启动一个tasklist子进程 指定输出结果到管道中
    p1 = subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE)


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

    # 读取p2进程的结果
    print(p2.stdout.read())
    print(p2.stderr.read().decode("GBK"))




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



  • 相关阅读:
    (Java实现) 洛谷 P1106 删数问题
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1106 删数问题
    目测ZIP的压缩率
  • 原文地址:https://www.cnblogs.com/huangchaonan/p/10120061.html
Copyright © 2020-2023  润新知