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)