【Python】读取写入INI文件

发布时间 2023-03-29 21:41:00作者: hayden_william

最近,写个abaqus的python脚本,需要输入的item比较多,而且也有一些不经常修改但又可能要修改的option。如果都用abaqus的getinput()和getinputs()函数,那输入的时候,屏幕上一个长长的输入框,也不方便。刚好,ini这种文件格式又方便又简单明了。python也有自带的解析器。

学习笔记如下

# %%
# Python2中是from ConfigParser import ConfigParser
from configparser import ConfigParser  
# 需要实例化一个ConfigParser对象
conf = ConfigParser()  
#  需要添加上config.ini的路径,不需要open打开,直接给文件路径就读取,也可以指定encoding='utf-8'
conf.read('config.ini')  
# 读取user段的name变量的值,字符串格式
print(conf['user']['name']) 

# %% [markdown]
# conf对象每个section段的数据类似于一个字典,可以使用[‘变量名’]或者.get(‘变量名’)获取对应的值,获取到的是字符串格式。
# 
# ini文件中的变量名是大小写不敏感的,而Section名是大小写敏感的。
# 
# 常用的读取方法:

# %%
# GET ALL SECTIONS NAME ;
conf.sections()
# RESULT IS = ['user', 'mysql', 'log']

# %%
# GET some  section's var 'value ;
# return is string
print(conf['mysql']['port'] )
# 同上,字符串格式
print(conf['mysql'].get('host') )
# : 同上,字符串格式
print(conf.get('mysql', 'db'))
# 返回数据类型为int
conf['mysql'].getint('port')
# 返回数据类型为float
conf['mysql'].getfloat('port')
# 返回数据类型为bool,将ini文件中的0/1,yes/no,
# on/‘off, true/false转换为python的True/False
conf['user'].getboolean('is_admin')

# %%
conf.has_section('log') # 检查是否有名为log的section,返回bool 。
conf.options('log') # 输出log section中所有的变量名,返回一个list。
conf.has_option('mysql', 'host') # 检查[mysql]下是否有host

# %%
# 判断是否有这个section
if conf.has_section('log') :
    # 如果有,就返回所有的var
    print(conf.options('log'))

# %% [markdown]
# ### 公共变量
# 假如每个Section变量组都有一批相同的重复变量,就可以在ini文件开头设定[DEFAULT]变量组。
# 
# 公用变量会自动添加到每一个段中。`conf['otherSectionName']['PublicVarName'] `同样能获取到变量的值。
# 
# conf对象常用的修改如下:

# %%
conf.add_section('ADD') # 添加section:[ADD]

#  在指定section中添加变量和变量值,section必须存在或已添加,
# value必须为字符串形式,可以设置DEFAULT字段的值
conf.set('ADD', 'add 1', '100')
conf.set('ADD','add 2','200')
global f
f=open('modify.ini','w',encoding='utf-8')


# 移除指定section下指定变量
conf.remove_option('ADD', 'add 2')
conf.remove_section('ADD')# 移除section
conf.write(f)
print(conf)
f.close()