2017-09-07 5 views
0

Meine Datei enthält IP-Adressen, die ich in Hostnamen konvertieren möchte. Die IP-Adressen sind bis auf die letzten drei Oktetts identisch. Zum Beispiel:Fügen Sie 0 zum Hostnamen hinzu

192.168.38.8 
192.168.38.9 
192.168.38.10 

Ich habe den folgenden Code in meinem Python-Skript die IP-Adresse mit dem Hostnamen zu ersetzen, die in dem letzten Oktetts endet.

hostname = re.sub('192.168.38.','Host-Name',lm.group(4)) 

Dies gibt mir die Ergebnisse:

Host-Name8 
Host-Name9 
Host-Name10 

Wie erhalte ich die einstelligen Oktetts eine führende Null zu haben? Die gewünschte Ausgabe wäre;

Host-Name08 
Host-Name09 
Host-Name10 
+0

Mögliche Duplikat [Beste Art und Weise mit führenden Integer als String formatiert werden Nullen?] (https://stackoverflow.com/questions/733454/best-way-to-format-integer-as-string-with-leading-zeros) – Barmar

+0

Idealerweise sollte es Nachteile haben ider ** 3 ** Ziffern, je nach Oktettgröße. 'Host-Name008' ... – RomanPerekhrest

+1

Mögliches Duplikat von [Nummer mit führenden Nullen anzeigen] (https://stackoverflow.com/questions/134934/display-number-with-leading-zeros) – CDspace

Antwort

0

re.sub ist nicht richtig eingesetzt.

Von documentation for re.sub können Sie eine Zeichenfolge oder eine Ersetzungsfunktion übergeben, die eine Zeichenfolge zurückgibt, wenn eine Übereinstimmung gefunden wird.

Hinweis: Sie eine der Methoden in Antworten auf Fragen in dem doppelten Flags Pad einstelligen verwenden kann.

def replace_ip(match): 
    last_octet = match.group(1) 

    return "".join((
     'Host-Name', 
     last_octet.zfill(2) 
    )) 


re.sub(r'192.168.38.(\d+)', replace_ip, ips_from_file) 
+0

@ Oluwafemi Sule - Arbeitete perfekt. Vielen Dank. – teamg

0

Sie könnten nur split() mit einfacher finden wie folgt:

for ip_addr in ["192.168.38.8", "192.168.38.9", "192.168.38.10"]: 
    print "Host-Name{:02}".format(int(ip_addr.split('.')[3])) 

Dies würde Ihnen:

Host-Name08 
Host-Name09 
Host-Name10 
Verwandte Themen