2014-07-12 2 views
-2

J'écris une instruction if et, bien qu'elle sélectionne la ligne correcte, j'aimerais que les données lui soient associées pour commencer deux lignes ci-dessous.Sélection de la chaîne correcte

Ceci est mon code actuel:

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 

est la chaîne Ici, dans laquelle je prends les informations de:

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----- 

Ce que je suis en train de faire est de sélectionner l'endroit où onion-key est mentionné et puis, dans un dictionnaire, mappez la clé RSA de début à la clé End RSA.

Comment puis-je y parvenir?

sortie serait un dictionnaire où onion-key est la clé et la valeur est la suivante:

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

S'il vous plaît donner un exemple de sortie –

+1

exemple ont été ajoutés ci-dessus – user2061913

Répondre

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

Que se passe-t-il si l'une des lignes de valeurs clés se termine par '" -key "' ou contient '" ----- "'? – martineau

+0

Le caractère '-' est-il autorisé dans la valeur de clé ssh? – Eugen

+0

Impossible de faire fonctionner tristement :( – user2061913

2

Cela sonne comme le travail pour une expression régulière.

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)} 

Si vous voulez trouver le service clé aussi:

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

Ou si vous avez un tas d'entre eux:

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

Avez-vous besoin de saisir la clé de service aussi? –

+0

Oui je fais, et merci cela fonctionne bien, mais dans le doc j'ai trois oignon-clés, comment puis-je saisir tous les trois en même temps – user2061913

+0

@ user2061913 donne une minute je vais trouver quelque chose –

Questions connexes