ini文件和Configparser模块

ini文件

ini文件(Initialization File)全名初始化文件,是一个纯文本文件,是一个无固定标准格式的配置文件,它以简单的文字与简单的结构组成,常常使用在Windows操作系统,或是其他操作系统上,许多程序也会采用ini文件作为设置程序之用。windows操作系统后来以注册表的形式取代掉INI档。
 有时候,ini文件也会以不同的扩展名,如".cfg"、".conf"或者".txt"代替

[DEFAULT]
a = test

[mysql]
default-character-set=utf8

[mysqld]
datadir =/dbserver/data
port = 33060
character-set-server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

中括号里面的部分称为section,译作节、区、段。

每一个sectiuon内,都是key=value形成的键值对,key称为option选项。
注意这里的DEFAULT是缺省section的名字,必须大写。

Configparser

此模块提供Configparser类,该类实现基本配置语言,改语言提供类似ini文件的结构。

可以将section当做key,section存储着键值对组成的字典,可以把ini配置文件当做一个嵌套的字典,默认使用的是有序字典。

1.下面来演示创建一个ini文件,以创建字典的方式。

>>> import configparser
>>> config = configparser.ConfigParser()
>>> config['DEFAULT'] = {'ServerAliveInterval': '45',
...                      'Compression': 'yes',
...                      'CompressionLevel': '9'}
>>> config['bitbucket.org'] = {}
>>> config['bitbucket.org']['User'] = 'hg'
>>> config['topsecret.server.com'] = {}
>>> topsecret = config['topsecret.server.com']
>>> topsecret['Port'] = '50022'     # mutates the parser
>>> topsecret['ForwardX11'] = 'no'  # same here
>>> config['DEFAULT']['ForwardX11'] = 'yes'
>>> with open('example.ini', 'w') as configfile:
...   config.write(configfile)

2.下面来读取这个ini文件内的数据

  • 读取ini文件,可以单个文件,也可以是文件列表,可以指定文件编码。

导入模块,cfg = configparser.Configparser()得到一个config对象,这里熟记

>>> import configparser
>>> cfg = configparser.Configparser()
>>> p1 = Path().absolute() / "mysql.ini"
>>> read_ini = cfg.read(p1)
>>> print(read_ini)

cfg.read(path,encoding = None),将配置文件的内容读取到内存中,接下里的操作基本上都是在内存,返回值时列表

cfg.default_section返回缺省的section
cfg.sections() 返回ini文件的section列表
cfg.options(section)返回section所有的options

cfg.items(section)返回一个元素为二元组键值对的列表
cfg.items()返回所有的section名字及其对象

cfg.get(section,option,fallback) fallback为缺省值,类似字典get获取方法
cfg.getint(), cfg.getfloat(), cfg.getboolean()

cfg.add_section(section_name) 增加一个section
cfg[section] = {}增加一个section,甚至增加option-value对
cfg.set(section, option, value)section存在的情况下,写入option-value键值对

cfg.remove_section(section) 删除section
cfg.remove_option(section,option) 删除option,值得注意的是这两个删除,只是在内存中操作,所以并不会修改磁盘上的文件

cfg.write(fileobj) 将内存中的cfg对象写入到fileobj上,注意open函数的权限"w"

练习题:

题目要求:将一个ini文件转换为json格式文件
思考:
已经存在的ini配置文件
未知的section
未知的option
将其转换为section(得到一个字典??转换吗??需不需要有序?)

import configparser 
from pathlib import Path
import json
import msgpack

#  这一步纯粹是操作习惯,,,,
p1 = Path('C:\\Users\\admin\\python\\课堂笔记练习\\文件&路径操作\\ini配置文件操作\\mysql.ini')
cfg = configparser.ConfigParser()
# 下面这一步已经将ini配置文件读取到了cfg对象中去了,现在只需要操作cfg这个对象即可
read_ok = cfg.read(p1)
# 设置一个空白字典储存ini配置信息
ini_dict = {}
# 把所有的sections读取
for i, _ in cfg.items():
    # 设置一个临时储存section的字典
    section_ini = {}
    for j,k in cfg.items(i):
        section_ini[j] = k
    ini_dict[i] = section_ini
    
print(ini_dict)  

#最后将字典转换成json即可
jsondata = json.dumps(ini_dict)
jsondata_msgpack = msgpack.dumps(ini_dict)
jsondata, jsondata_msgpack

这个模块的官方文档写的特别有意思,希望了解更多细则的可以关注官方文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值