2016-08-12 30 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) 

輸出是字典的名單,你可以通過多種方式進行調整。