2016-08-12 273 views
2

我坚持与输出以下的Python:字符串[K1:V1,K2:V2],[K3:V3]到对象

[[_type:logs, _id:AVY0ofxOHiyEPsw_vkZS, _index:firewall-all-2016.07.29, _score:13.445344], [_type:logs, _id:AVY1EI1z79siNC3TEi7P, _index:firewall-all-2016.07.29, _score:13.445344]] 

我想分析这个文本的应用程序成一个可迭代的对象。但使用ast.literal_eval的标准方法不喜欢输入。

是否有别的东西之前,我开始寻找到海峡更换等我可以试试...

谢谢

+0

eval()的问题在于字符串没有用引号引起来。你可以用3'replace()函数得到你想要的。这不可接受吗? –

回答

1

如何:

import re 

data = "[[_type:logs, _id:AVY0ofxOHiyEPsw_vkZS, _index:firewall-all-2016.07.29, _score:13.445344], [_type:logs, _id:AVY1EI1z79siNC3TEi7P, _index:firewall-all-2016.07.29, _score:13.445344]]" 

parsed_1 = re.findall("\[(.*?)\]", data[1:-1]) 

parsed_list = [] 
for line in parsed_1: 
    parsed_dict = {} 
    for record in line.split(","): 
     k, v = record.split(":") 
     parsed_dict[k] = v 
    parsed_list.append(parsed_dict) 

print(parsed_list) 

输出是字典的名单,你可以通过多种方式进行调整。