2012-05-31 22 views
7

Voglio estrarre gli ultimi due valori di campo da una variabile di lunghezza variabile. Ad esempio, prendere in considerazione i tre valori seguenti:estrarre gli ultimi due campi da split

fe80::e590:1001:7d11:1c7e 

ff02::1:ff1f:fb6 

fe80::7cbe:e61:f5ab:e62 ff02::1:ff1f:fb6 

Queste tre linee sono di lunghezza variabile. Voglio estrarre solo gli ultimi due valori di campo se ho diviso ogni riga da delimitatore:

Cioè, dalle tre linee, voglio:

7d11, 1c7e 

ff1f, fb6 

ff1f, fb6 

questo può essere fatto utilizzando split()? Non ho idee.

risposta

16

Se s è la stringa contenente l'indirizzo IPv6, utilizzare

s.split(":")[-2:] 

per ottenere gli ultimi due componenti. Il metodo split() restituirà un elenco di tutti i componenti e lo [-2:] affetterà questo elenco per restituire solo gli ultimi due elementi.

+0

come posso ottenere i valori separati da:, che è per la prima riga, come posso ottenere i valori come 7d11: 1c7e – learner

+0

sembra che alcuni dei delimitatori siano double '':'', sarebbe meglio Sostituisci tutti i due punti nello spazio e usa 'split()' – xvatar

+2

@ user1411416 puoi usare '':'. join()' – xvatar

15

È possibile utilizzare str.rsplit() di dividere da destra:

>>> ipaddress = 'fe80::e590:1001:7d11:1c7e' 
>>> ipaddress.rsplit(':', 2) # splits at most 2 times from the right 
['fe80::e590:1001', '7d11', '1c7e'] 

Questo evita la scissione non necessaria della prima parte dell'indirizzo.

+1

Vero, ma secondo i miei test, è solo circa il 6% più veloce. –

+2

@JoelCornett Penso che sia sempre una buona pratica eliminare i calcoli inutili, non importa quanto minori. – Matt

Problemi correlati