2016-12-20 21:58 GMT+01:00 Marcello <marce...@linuxvil.it>: > Utilizzo paramiko per leggere una parte di configurazione di un router che > memorizzo in una variabile. > Il valore della variabile è: > > # dec/20/2016 21:09:12 by RouterOS 6.37.3 > # software id = X26E-3BA9 > # > /ppp secret > add local-address=10.172.33.1 name=nome1 password=passwd1 \ > profile=profile-sstp remote-address=10.172.33.2 service=sstp > add local-address=10.172.33.1 name=nome2 password=passwd2 profile=\ > profile-ovpn remote-address=10.172.33.2 service=ovpn > add local-address=10.172.34.37 name=nome3 password=passwd3 \ > profile=profile-sstp remote-address=10.172.34.38 service=sstp > add local-address=10.172.34.45 name=nome4 password=\ > passwd4 profile=profile-sstp remote-address=10.172.34.46 service=\ > sstp > add local-address=10.172.34.49 name=nome5 password=passwd5 \ > profile=profile-sstp remote-address=10.172.34.50 service=sstp > add local-address=10.172.34.53 name=nome6 password=passwd6 \ > profile=profile-sstp remote-address=10.172.34.54 service=sstp > > > Devo creare un dizionario che contenga: > > name, remote-address, password > > ho già consumato le unghie con string.find e non so più dove aggrapparmi. > Un idea potrebbe essere: > prendi quello che è compreso tra 'name=' e 'password' > prendi quello che è compreso tra 'password' e 'profile' > ...... > > seconda idea potrebbe essere string.split ed andare a fare un if su ogni > parola, se comincia con name=xxxxx taglia 5 caratteri iniziali. > Magari funziona, ma penso di sprecare troppe risorse di CPU. > > Penso che il metodo migliore siano le espressioni regolari.... ma la mia > testa ha poca RAM e il programma per caricale non gira. :) > Qualche dritta su come poter procedere? > Grazie 1000 anche solo per aver letto fino a qui. >
Questa riga qui sotto, ammettendo di avere la variabile conf che contiene tutta la tua stringa con la configurazione fa, credo, quello che chiedi: config = [dict([(param.split("=")) for param in host.split(" ") if "=" in param]) for host in conf.split("add ")[1:]] Non è il massimo della leggibilità, ma di sicuro è veloce e usa solo split e list comprehension :-) Il valore di config è un elenco di dizionari siffatto: [{'local-address': '10.172.33.1', 'name': 'nome1', 'password': 'passwd1', 'profile': 'profile-sstp', 'remote-address': '10.172.33.2', 'service': 'sstp\n'}, {'local-address': '10.172.33.1', 'name': 'nome2', 'password': 'passwd2', 'profile': '', 'remote-address': '10.172.33.2', 'service': 'ovpn\n'}, {'local-address': '10.172.34.37', 'name': 'nome3', 'password': 'passwd3', 'profile': 'profile-sstp', 'remote-address': '10.172.34.38', 'service': 'sstp\n'}, {'local-address': '10.172.34.45', 'name': 'nome4', 'password': '', 'profile': 'profile-sstp', 'remote-address': '10.172.34.46', 'service': ''}, {'local-address': '10.172.34.49', 'name': 'nome5', 'password': 'passwd5', 'profile': 'profile-sstp', 'remote-address': '10.172.34.50', 'service': 'sstp\n'}, {'local-address': '10.172.34.53', 'name': 'nome6', 'password': 'passwd6', 'profile': 'profile-sstp', 'remote-address': '10.172.34.54', 'service': 'sstp'}] Certo, ogni dizionario ha più roba di quello che ti serve, ma è un vero problema? Se lo è, devi correggere if "=" in param con if param.split("=")[0] in ("name", "remote-address", "password") Ciao. Marco. -- http://beri.it/ - Un blog http://beri.it/i-miei-libri/ - Qualche libro http://beri.it/articoli/ - Qualche articolo
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python