python3中配置文件ini的使用详解----读写、list&dict&path等变量----configparser



0.背景知识

背景知识:
python3中,根据不同的工具或系统,见到过各种类型的配置文件,有json格式的、py格式的、ini格式的,yaml、txt、excel等等。但是,最常见的还是ini格式的配置文件。

为什么要用ini格式作为配置文件?
一般来说,如果只是读取变量信息,且这些变量信息一般都不需要变动或修改。那么最常用的py文件即可,直接导入读取即可,简单方便。但如果需要系统自动修改或增加信息的时候,使用ini文件确实是非常好的一个选择。
详情可参考:https://my.oschina.net/janzhen/blog/86189



1.ini文件的格式

# config.ini文件

[sys_config]
time = 12:30
mylist = [18, "alien", 90, "12alien"]
path = ../DB/my_excel.xls

[user_info]
name = alien
age = 18
pw = 123456

  • 每个[]圈起来是区域名,下面是对应这个区域的变量,且不同区域可以在通过系统增加、修改等
  • 变量不需要再使用“”号圈起来了,这个和py文件的变量有点区别
  • 读取完变量之后,所有的变量全部都是字符串str格式的,所以如果变量中如果有list,dict、json等信息,需要使用json.loads()方法把外面的“”的去掉,就变成数据的原始格式了。
  • 如果path变量,ini文件不需要使用“”,读取完之后变量就携带“”了,就直接可以用了。注意此时的ini文件的path是此文件相对变量文件的相对地址。或者直接把绝对地址写进去也行。


2.ini文件读取方式

(1).读取ini文件所有的区块名列表、某个区块名下面所有的key

def read_sys_config_path():
    current_path = os.path.dirname(os.path.abspath(__file__))
    config_file = os.path.join(current_path, '../Config/sys_config.ini')
    conf_info = configparser.ConfigParser()
    conf_info.read(config_file, encoding="utf-8")
    return conf_info

def get_all_keys_by_sections_from_sys_config():
    sys_path = read_sys_config_path()
    section_list = sys_path.sections()
    print("所有区块名的列表=====>", section_list)
    key_list = sys_path.options("judge_type")
    print("某个区块名下面key的列表=====>", key_list)
    

所有区块名的列表=====> ['REDIS', 'judge_type', 'quantity']
某个区块名下面key的列表=====> ['error_order', 'common_quantity_split', 'common_amount_split', 'common_dont_split']



(2)获取某个区块下面所有的键值对(key & value)列表

def read_section_items(section_name):
    cf = read_sys_config_path()
    item_list = cf.items(section_name)
    print("item_list=======>>", item_list)
    print("item_list=======>>", type(item_list))


read_section_items("user_info")


item_list=======>> [('name', 'alien'), ('age', '18'), ('pw', '123456')]
item_list=======>> <class 'list'>



(3).根据某个区块名以及对应的key,获取对应的value

因ini文件,默认保存的所有数据都是string类型,最终获取到的数据如果是列表、数字等,最终使用的时候是需要转换一下的。

# read_config.py文件

import configparser, json
import xlrd

config = configparser.ConfigParser()
config.read("../Tools/config.ini")

# 读取变量信息
mylist = config.get("sys_config", "mylist")
print(mylist, type(mylist), repr(mylist))


# 解析原始变量信息(去掉"")
new_list = json.loads(mylist)
print(new_list, type(new_list), repr(new_list))


# path信息,直接就可以使用了
path = config.get("sys_config", "path")
print(path, type(path), repr(path))


[18, "alien", 90, "12alien"] <class 'str'> '[18, "alien", 90, "12alien"]'
[18, 'alien', 90, '12alien'] <class 'list'> [18, 'alien', 90, '12alien']
../DB/my_excel.xls <class 'str'> '../DB/my_excel.xls'



3.通过ini文件的变量的path,读取excel文件

在这里插入图片描述
在这里插入图片描述

# read_config.py文件

import configparser
import xlrd

config = configparser.ConfigParser()
config.read("../Tools/config.ini")

path = config.get("sys_config", "path")
print(path, type(path), repr(path))

workbook = xlrd.open_workbook(path)
# 根据sheet索引或者名称获取sheet内容
sheet1 = workbook.sheet_by_index(0)

# 获取单元格内容
print(sheet1.cell(1, 0).value)
print(sheet1.cell(1, 1).value)
print(sheet1.cell(1, 2).value)


../DB/my_excel.xls <class 'str'> '../DB/my_excel.xls'
18.0
alien
china




4.ini文件的写入

# read_config.py文件

import configparser

config = configparser.ConfigParser()
config.read("../Tools/config.ini")


try:
    config.add_section("Home")
    config.set("Home", "IP", "10.12.23.56")
    config.set("Home", "Mask", "255.255.255.0")
except configparser.DuplicateSectionError:
    print("Section 'Home' already exists")

config.write(open("../Tools/config.ini", "w"))

# 写入后的config.ini文件

[sys_config]
time = 12:30
mylist = [18, "alien", 90, "12alien"]
path = ../DB/my_excel.xls

[user_info]
name = alien
age = 18
pw = 123456

[Home]
ip = 10.12.23.56
mask = 255.255.255.0



5.ini文件的解码

如果ini里面的变量,有的值带中文字符,需要在打开的时候,使用“utf8”解码方式打开


config = configparser.ConfigParser()
config.read("../Tools/config.ini", encoding="utf8")



6.ini文件的注释

  • 注释使用英文的分号;
  • 类似如下情况(显示效果不对,不过使用英文的分号;就对了!!!)

;客户唯一识别单号,每个用户、每笔母单有对应的一个识别号
[Cust_ID]
cust_id = 90300076

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello-alien

您的鼓励,是我最大的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值