Python读取conf,ini等文件

test.conf

#[header]
interface=wlan0
driver=nl80211
hw_mode=g
channel=10
auth_algs=3
ignore_broadcast_ssid=0

#[wifi1]
ssid=wifi-1
wpa=3
wpa_passphrase=tesecase.

#[wifi3]
bss=wlan0_1
ssid=33333333
wpa=3
wpa_passphrase=333333333
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=TKIP CCMP

#[wifi2]
ssid=wifi-2
wpa=3
wpa_passphrase=22222222
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=TKIP CCMP

config ini文件格式介绍

config 配置文件由两部分组成sections与items

  • sections 用来区分不同的配置块 [wifi1]
  • items 是sections下面的键值 {'ssid':'wifi-1','wpa'='3'}

configparser库基本使用

from configparser import ConfigParser

config = ConfigParser()
# 传入读取文件的地址,encoding文件编码格式,中文必须
config.read('test.conf', encoding='UTF-8')

# 读 字符串
# files = ''
# with open('test.conf', 'r', encoding='UTF-8') as f:
#    files =f.read()
# config.read_string(files)

# 获取header下interface的值,不存在抛出KeyError异常
print('header>interface:', config['header']['interface'])

# 获取wifi1的ssid值
wifi1 = config['wifi1']
print('wifi1>ssid:', wifi1['ssid'])

# 判断配置文件中是否存在header块
print('header' in config)

# 得到所有的section
print('sections:', config.sections())

# 得到该wifi1的所有option选项,不存在NoSectionError异常
print('options:', config.options('wifi1'))

# 得到该wifi1的所有键值对,不存在NoSectionError异常
print('items:', config.items('wifi1'))

# 得到wifi1中wpa_passphrase的值,返回为string类型,不存在NoSectionError或NoOptionError异常
print(type(config.get('wifi1', 'wpa_passphrase')))
print('wifi1>wpa_passphrase :', config.get('wifi1', 'wpa_passphrase'))

# 得到 wifi1 中 wpa 的值,返回为 int 类型
print(type(config.get('wifi1', 'wpa')))  # get 得到的string
print(type(config.getint('wifi1', 'wpa')))  # getint 得到的int
print('wifi1>wpa:', config.getint('wifi1', 'wpa'))
print('wifi1>wpa:', config['wifi1'].getint('wpa'))

# 修改
config['wifi1']['ssid'] = 'wifi-1'
config['wifi1']['wpa_passphrase'] = 'tesecase.'
print(config['wifi1']['ssid'])
print(config['wifi1']['wpa_passphrase'])

# 删除指定的option
config.remove_option('wifi1', 'wpa_key_mgmt')
config.remove_option('wifi1', 'wpa_pairwise')
config.remove_option('wifi1', 'rsn_pairwise')
print(config.options('wifi1'))

# 删除指定的section
config.remove_section('wifi2')
print('wifi2' in config)

# 添加一个section
config.add_section('wifi2')
print(config.options('wifi2'))

# 设置新section的options

# set的方式
config.set('wifi2', 'bss', 'wlan0_0')

# 字典的方式
config['wifi2'] = {
    'ssid': 'wifi-2',
    'wpa': 3,
    'wpa_passphrase': '22222222',
    'wpa_key_mgmt': 'WPA-PSK',
    'wpa_pairwise': 'TKIP CCMP',
    'rsn_pairwise': 'TKIP CCMP'
}

# 写回到文件
# config.write(open('test.conf', 'w', encoding='UTF-8'), space_around_delimiters=False)

拓展

处理不带sections的文件,如以上hostapd.conf文件
由于这里已经知道,在配置文件的具体配置的行首加“#”相当于注释,后续在使用configparser处理文件时,只需要在读入的时候解除“#”,写回时添加“#”

# 解除注释 
files = ''
with open('test.conf', 'r', encoding='UTF-8') as f:
    for line in f:
        files += (line[1:]) if line.startswith('#[') else line

# 操作文件内容
# ...

# 添加注释
files = files.replace('[', '#[')
with open('test.conf', 'w', encoding='UTF-8') as f:
    f.write(files)

猜你喜欢

转载自www.cnblogs.com/s3320/p/12798198.html