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

时间:2014-10-16 15:58:22

标签: python list split

我是python的初学者。 所以我可能会重复相同的事情。

问题出在这里 - > 我有一个名为的配置文件 installer_data.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

由于服务列表未填充。 你们能指出我在这里缺少的东西吗?

1 个答案:

答案 0 :(得分:1)

您可以使用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'}

使用词典更好,因为您可以通过名称访问任何变量,例如:regex["host_ip"]。当您使用列表时,您只能使用数字(regex[0])访问,如果您不知道它不能使用的顺序。