2014-07-12 21 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给我一分钟我会拿出一些东西 –