2014-07-12 23 views
-2

我正在寫一個if語句,並且當它選擇正確的行時,我希望數據與它關聯以在下面開始兩行。選擇正確的字符串

這是我當前的代碼:

for l in message.splitlines(): 
      q = l.strip().split(" ")     
      if q[0] == 'onion-key': 
       format = ['onion-key'] 
       data = dict(zip(format, q[0:])) 
       idt= data['onion-key'] 
       print idt 

這是在我從取信息的字符串:

onion-key 
-----BEGIN RSA PUBLIC KEY----- 
MIGJAoGBANRir84jtEQP6tqhTubbcs+EWHgzxBdU6QG0HV+3tZ5m4JPo/hTEZd+I 
2kvmtYZZ3WdxXhcISkaa476ArbKL6BmPCG1h+yeMko6yhu+gWk/40RE0dHKoPcRg 
kV4sXerZezXnB4e1d8FHyDiPmgY6LHvfXZqn19xDRx11/h92/kb5AgMBAAE= 
-----END RSA PUBLIC KEY----- 
service-key 
-----BEGIN RSA PUBLIC KEY----- 
MIGJAoGBALVjBUTK0wkWVjh+liiBVrweZskPGiIynKxDy+c4XBnEYqm5dcnifEDf 
lgyNxOkv0gwYwrt4gS0+t0fyNARq+u6/MEJCEjgc8aS77gMLy/BQgkQHmLE6adjc 
tQCDfklbblobq3YrTCQTgECuG91ol3okMM3M4gYPuGS/7MJmAyonAgMBAAE= 
-----END RSA PUBLIC KEY----- 

我所要做的就是選擇其中onion-key被提及和然後在字典中將開始RSA密鑰映射到結束RSA密鑰。

我該如何做到這一點?

輸出將是一個字典,其中onion-key是鍵和值如下:

MIGJAoGBANRir84jtEQP6tqhTubbcs+EWHgzxBdU6QG0HV+3tZ5m4JPo/hTEZd+I 
2kvmtYZZ3WdxXhcISkaa476ArbKL6BmPCG1h+yeMko6yhu+gWk/40RE0dHKoPcRg 
kV4sXerZezXnB4e1d8FHyDiPmgY6LHvfXZqn19xDRx11/h92/kb5AgMBAAE= 

dict{onion-key,  MIGJAoGBANRir84jtEQP6tqhTubbcs+EWHgzxBdU6QG0HV+3tZ5m4JPo/hTEZd+I 
    2kvmtYZZ3WdxXhcISkaa476ArbKL6BmPCG1h+yeMko6yhu+gWk/40RE0dHKoPcRg 
    kV4sXerZezXnB4e1d8FHyDiPmgY6LHvfXZqn19xDRx11/h92/kb5AgMBAAE=} 
+0

請給例如輸出 –

+1

例如已添加在 – user2061913

回答

0
f = open('yourfile') 
d = {} 
for line in f: 
    line = line.strip() 
    if line.endswith("-key"): 
     current_key = line 
     d[current_key] = "" 
    elif "-----" not in line: 
     d[current_key] += line 
+1

以上如果其中一個關鍵值行碰巧以「--key」結尾或包含「-----」'? – martineau

+0

在ssh鍵值中是否允許' - '字符? – Eugen

+0

無法讓它悲傷地工作:( – user2061913

2

這聽起來像一個正則表達式的工作。

import re 
pat=re.compile(r"onion-key\s?-----BEGIN RSA PUBLIC KEY-----\s?(.*?)\s?-----END RSA PUBLIC KEY-----", re.DOTALL) 
result = {'onion-key': key for key in pat.findall(message)} 

如果您要查找的服務鍵太:

pat = re.compile(r"([\w-]+)\s-----BEGIN RSA PUBLIC KEY-----\s(.*?)\s-----END RSA PUBLIC KEY-----", re.DOTALL) 
result = dict(pat.findall(message)) 

或者,如果你對他們有一大堆:

results = [dict(pair) for pair in zip(*[iter(pat.findall(message))]*2)] 
+0

你是否需要獲取服務密鑰? –

+0

是的,我做的,謝謝,這是工作正常,但在文檔中我有三個洋蔥鍵,我怎麼能在同一時間抓住所有三個 – user2061913

+0

@ user2061913給我一分鐘我會拿出一些東西 –