读取文本文件,按分隔符拆分,从特定行获取数据,并将输出保存到fi

2024-03-29 14:33:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像这样的文件

[host1]
connection_type = mysql
database = master
port = 5432
host = aaa_host1

[host2]
connection_type = psql
database = master
port = 5432
host = bbb_host2

[host3]
connection_type = mysql
database = master
port = 5432
host = ccc_host3

[host4]
connection_type = mysql
database = master
port = 5432
client = aaa_host4

此文件与许多主机一起运行。我试图找到每个具有特定客户机代码(即aaa)的主机,并将这些节输出到一个文件中。我现在的代码如下

myhost = sys.argv[1]

stanzas = []
with open("/dir/to/file/file.txt") as f:
    lines = f.read()
    for entry in lines.split("\n\n"):
        for line in entry:
            if line.startswith(clientcode):
                host = line.split("=")[-1]
                if host.startswith(myhost):
                    stanzas.append(entry)

这显然是非常错误和丑陋的,有没有更好的方法用空行分割并解析我不知道的那一节?如果我在条目迭代中为for行添加了一个打印(行),那么它会垂直打印字母,这样就不会得到正确的循环


Tags: 文件masterhostforporttypelinemysql
1条回答
网友
1楼 · 发布于 2024-03-29 14:33:16

您可以使用Python的内置^{},因为您的文件是有效的.ini

import configparser

def find_hosts(clientcode):
    hosts = []
    config = configparser.ConfigParser()
    config.read('file.txt')

    for host in config.sections():
        for key, value in config.items(host):
            if key == 'host' and value.startswith(clientcode):
                hosts.append(config.items(host))

    return hosts

print(find_hosts("aaa"))

输出

[[('connection_type', 'mysql'), ('database', 'master'), ('port', '5432'), ('host', 'aaa_host1')]]

相关问题 更多 >