我是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
由于服务列表未填充。 你们能指出我在这里缺少的东西吗?
答案 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]
)访问,如果您不知道它不能使用的顺序。