zoukankan      html  css  js  c++  java
  • 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



  • 相关阅读:
    TCP 的那些事儿(下)
    如何获取(GET)一杯咖啡——星巴克REST案例分析
    前端必读:浏览器内部工作原理
    伟大的程序员是怎样炼成的?
    从用户行为打造活动交互设计闭环——2014年世界杯竞猜活动设计总结
    技术普及帖:你刚才在淘宝上买了一件东西
    什么是互联网思维?给你最全面的解释
    程序员生存定律-打造属于自己的稀缺性
    技术人员如何去面试?
    13幅逻辑图,领略杜克大学的经典思维
  • 原文地址:https://www.cnblogs.com/huangchaonan/p/10120061.html
Copyright © 2011-2022 走看看