在python中读取配置文件并将其存储到列表中,然后将其拆分为子列表

2024-05-20 20:26:58 发布

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

我是python的初学者。 也许我在重复同样的东西。你知道吗

问题来了-->; 我有一个名为 安装程序_数据.txt(包含)

host_ip = 10.5.5.81
services = mesos_master,hdfs_datanode,storm,kafka,zookeeper,pig
host_ip = 10.6.4.31
services = mesos_slave,zookeeper,cassandra,hdfs_namenode

我正在尝试通过此脚本存储内容-->

in_file = open("installer_data.txt","r")
lines = [line.rstrip('\n') for line in open("installer_data.txt")]
service_types =("mesos_master","mesos_slave","hdfs_namenode","hdfs_datanode","kafka","zookeeper","cassandra","pig")
service = [ f for f in lines if f in service_types]
hosts = [ f for f in lines if f not in service_types]
print service[0]

错误

Returns Traceback (most recent call last):
  File "./file_test.py", line 13, in <module>
    print service[0]
IndexError: list index out of range

因为服务列表没有填充。 你们能告诉我我缺了什么吗?你知道吗


Tags: ingtipmastertxthostforservice
1条回答
网友
1楼 · 发布于 2024-05-20 20:26:58

您可以使用regular expressions解析它,这要简单得多!你知道吗

import re #import regex
string = open("data.txt","r").read() #load file
regex = re.compile('(.+) = (.+)').findall(string) #look for pattern (.+) = (.+) in 'string'
print regex #print

这将输出:

[('host_ip', '10.5.5.81'), ('services', 'mesos_master,hdfs_datanode,storm,kafka,zookeeper,pig'), ('host_ip', '10.6.4.31'), ('services', 'mesos_slave,zookeeper,cassandra,hdfs_namenode')]

你也可以把它转换成字典,这样会更好,但是因为文件中有同名的变量,所以不能这样做。无论如何,如果您想更改它,您可以使用:dict(regex)将它转换为dict,它将输出:{'services': 'mesos_slave,zookeeper,cassandra,hdfs_namenode', 'host_ip': '10.6.4.31'}

使用dictionary更好,因为您可以通过名称访问任何变量,例如:regex["host_ip"]。使用list时,只能使用数字(regex[0])进行访问,如果不知道顺序,则不能使用list。你知道吗

相关问题 更多 >