zoukankan      html  css  js  c++  java
  • 转 python3 读取 ini配置文件

    在代码中经常会通过ini文件来配置一些常修改的配置。下面通过一个实例来看下如何写入、读取ini配置文件.

    需要的配置文件是:

    1 [path]
    2 back_dir = /Users/abc/PycharmProjects/Pythoncoding/projects/
    3 target_dir = /Users/abc/PycharmProjects/Pythoncoding/
    4 
    5 [file]
    6 back_file = apitest

    import os
    import time
    import configparser
    # back_path = "/Users/abc/PycharmProjects/Pythoncoding/projects/"
    # back_file ="hello.txt"
    # 可以写为读取配置文件
    # 第一步:创建conf对象
    conf = configparser.ConfigParser()
    # 第二步:添加section、options的值
    conf.add_section("path")
    conf.set("path","back_dir","/Users/abc/PycharmProjects/Pythoncoding/projects/") # option
    conf.set("path","target_dir","/Users/abc/PycharmProjects/Pythoncoding/") # option
    conf.add_section("file")
    conf.set("file","back_file","apitest")

    # 第三步:写入文件
    with open("path.ini",'w')as conffile:
    conf.write(conffile)

    # 第四步:读取配置文件中的section、options的值
    back_dir =conf.get('path','back_dir')
    back_file =conf.get("file","back_file")
    target_dir =conf.get("path","target_dir")

    # 执行zip压缩命令,将apitest目录下所有文件打包压缩
    source =[back_dir,back_file]
    target_file=target_dir+time.strftime("%Y%m%d%H%M%S")+'.zip'
    zip_commond ="zip -qr "%s" "%s""%(target_file,''.join(source))
    print(zip_commond)
    if os.system(zip_commond)==0:
    print('Successful backup to',target_file)
    else:
    print('Backup Failed')

    print(conf.sections())
    #['path', 'file']

    print(conf.options('path'))
    #['back_dir', 'target_dir']

    print(conf.items('path'))
    #[('back_dir', '/Users/abc/PycharmProjects/Pythoncoding/projects/'), ('target_dir', '/Users/abc/PycharmProjects/Pythoncoding/')]

    笔记:

    模块常用函数:
    1)读取配置文件
    read(filename) 直接读取ini文件内容
    sections() 得到所有的section,并以列表的形式返回
    options(section) 得到该section的所有option
    items(section) 得到该section的所有键值对
    get(section,option) 得到section中option的值,返回为string类型
    getint(section,option) 得到section中option的值,返回为int类型,还有相应的getboolean()和getfloat() 函数。
    2)写入配置文件
    add_section(section) 添加一个新的section
    set( section, option, value) 对section中的option进行设置,需要调用write将内容写入配置文件。

    如何使用Python3读写INI配置文件

    ini是微软Windows操作系统中的文件扩展名(也常用在其他系统)。

    INI是英文“初始化(Initial)”的缩写。正如该术语所表示的,INI文件被用来对操作系统或特定程序初始化或进行参数设置。

    通过它,可以将经常需要改变的参数保存起来(而且还可读),使程序更加的灵活。

    我先给出一个ini文件的示例。

    [School]
    ip = 10.15.40.123
    mask = 255.255.255.0
    gateway = 10.15.40.1
    dns = 211.82.96.1

    [Match]
    ip = 172.17.29.120
    mask = 255.255.255.0
    gateway = 172.17.29.1
    dns = 0.0.0.0

    这个配置文件中保存的是不同场合下的IP设置参数。

    下面将以生成和读取这个配置文件为例,进行讲解。

    Python(v3)读取方法

    首先,Python读取ini配置需要用到ConfigParser包,所以要先加载它。

    import configparser

    之后我们需要载入配置文件。

    config=configparser.ConfigParser()

    #IpConfig.ini可以是一个不存在的文件,意味着准备新建配置文件。
    config.read("IpConfig.ini")

    接下来,我们可以使用configparser.add_section()向配置文件中添加一个Section

    #添加节School
    config.add_section("School")

    注意:如果文件中已经存在相应的项目,则不能再增加同名的节。

    然后可以使用configparser.set()在节School中增加新的参数。

    #添加新的IP地址参数
    config.set("School","IP","192.168.1.120")
    config.set("School","Mask","255.255.255.0")
    config.set("School","Gateway","192.168.1.1")
    config.set("School","DNS","211.82.96.1")

    你可以以同样的方式增加其它几项。

    #由于ini文件中可能有同名项,所以做了异常处理
    try:
    config.add_section("Match")
    config.set("Match","IP","172.17.29.120")
    config.set("Match","Mask","255.255.255.0")
    config.set("Match","Gateway","172.17.29.1")
    config.set("Match","DNS","0.0.0.0")
    except configparser.DuplicateSectionError:
    print("Section 'Match' already exists")

    增加完所有需要的项目后,要记得使用configparser.write()进行写入操作。

    config.write(open("IpConfig.ini", "w"))

    以上就是写入配置文件的过程。

    接下来我们使用configparser.get()读取刚才写入配置文件中的参数。读取之前要记得读取ini文件

    ip=config.get("School","IP")
    mask=config.get("School","mask")
    gateway=config.get("School","Gateway")
    dns=config.get("School","DNS")

    print((ip,mask+" "+gateway,dns))

    下面是一个完整的示例程序,他将生成一个IpConfig.ini的配置文件,再读取文件中的数据,输出到屏幕上。

    # -*- coding: utf-8 -*-

    import configparser

    #读取配置文件
    config=configparser.ConfigParser()
    config.read("IpConfig.ini")

    #写入宿舍配置文件
    try:
    config.add_section("School")
    config.set("School","IP","10.15.40.123")
    config.set("School","Mask","255.255.255.0")
    config.set("School","Gateway","10.15.40.1")
    config.set("School","DNS","211.82.96.1")
    except configparser.DuplicateSectionError:
    print("Section 'School' already exists")

    #写入比赛配置文件
    try:
    config.add_section("Match")
    config.set("Match","IP","172.17.29.120")
    config.set("Match","Mask","255.255.255.0")
    config.set("Match","Gateway","172.17.29.1")
    config.set("Match","DNS","0.0.0.0")
    except configparser.DuplicateSectionError:
    print("Section 'Match' already exists")

    #写入配置文件
    config.write(open("IpConfig.ini", "w"))

    ip=config.get("School","IP")
    mask=config.get("School","mask")
    gateway=config.get("School","Gateway")
    dns=config.get("School","DNS")

    print((ip,mask+" "+gateway,dns))

    Python读取ini文件还是十分简单的,这里我给出的只是一些简单的使用方法,如果想用更高级的功能,比如和注释有关的功能。可以参考Pyhton官方文档

  • 相关阅读:
    插件开发取路径
    使用SWT模拟鼠标键盘事件
    简单RCP框架源码分析
    dom4j中使用xpath解析带命名空间的xml文件,取不到节点的解决办法
    log4j不能输出配置文件问题的解决。
    SWT中定时器的一种特殊实现方式/SWT中线程互访时display.asyncExec/display.syncExec...程序死掉无响应的解决办法
    Eclipse插件开发中对于外部Jar包和类文件引用的处理(彻底解决插件开发中的NoClassDefFoundError问题)
    zk 3.6数据绑定
    PythonExcel 模块对比
    去除数组中重复元素
  • 原文地址:https://www.cnblogs.com/python-xiakaibi/p/10117434.html
Copyright © 2011-2022 走看看