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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM