在Python中读取配置文件

4nkexdtk  于 2023-03-28  发布在  Python
关注(0)|答案(3)|浏览(131)

我想读下面的配置文件有工人和经理的IP定义。我尝试了configparser模块,但它需要键-值对。任何人都有任何想法来阅读下面的文件使用python,我将不胜感激。

[managers]
1.2.3.4
[workers]
2.3.45.5
3.5.6.7
5.7.8.9

文件可能具有随机数量的IP。

9avjhtql

9avjhtql1#

如果按如下方式重新格式化数据文件,则可以使用configparser模块解析它。

数据文件

[managers]
ip = 1.2.3.4
[workers]
ip = 2.3.45.5
     3.5.6.7
     5.7.8.9

样本使用情况

from configparser import ConfigParser
# from ConfigParser import ConfigParser # for python3 
data_file = 'tmp.txt'

config = ConfigParser()
config.read(data_file)

config.sections()
# ['managers', 'workers']

config['managers']['ip']
# '1.2.3.4'

config['workers']['ip']
#'2.3.45.5\n3.5.6.7\n5.7.8.9'

config['workers']['ip'].splitlines()
#['2.3.45.5', '3.5.6.7', '5.7.8.9']
bgtovc5b

bgtovc5b2#

使用简单的迭代。

演示:

res = {}
temp = []
with open(filename, "r") as infile:
    for line in infile:                      #Iterate over each line
        line = line.strip()
        if line.startswith("["):             #Check if line is header
            line = line.strip("[]")
            res[line] = []                   #Create Key
            temp.append(line)
        else:
            res[temp[-1]].append(line)        #Append Values.
print(res)

输出:

{'workers': ['2.3.45.5', '3.5.6.7', '5.7.8.9'], 'managers': ['1.2.3.4']}
pcww981p

pcww981p3#

一个优雅的方法是使用typed-settingsipaddress
1.安装typed-settingspip install typed-settings .
1.创建名为config.tomltoml文件。

[managers]
ip = ["1.2.3.4"]

[workers]
ip = ["2.3.45.5", "3.5.6.7", "5.7.8.9"]

1.定义数据模型类并加载它。

import ipaddress
import typed_settings as ts

@ts.settings(frozen=True)
class Mangers:
    ip = ts.option(converter=lambda l: [ipaddress.ip_address(i) for i in l])

@ts.settings(frozen=True)
class Workers:
    ip = ts.option(converter=lambda l: [ipaddress.ip_address(i) for i in l])

managers_settings = ts.load(Mangers, appname="managers", config_files=["config.toml"])
workers_settings = ts.load(Workers, appname="workers", config_files=["config.toml"])
print(managers_settings)
print(workers_settings)

# Mangers(ip=[IPv4Address('1.2.3.4')])
# Workers(ip=[IPv4Address('2.3.45.5'), IPv4Address('3.5.6.7'), IPv4Address('5.7.8.9')])

相关问题