2017-12-15 13 views
1

Dies ist ein Followup zu Python. How to print a certain part of a line after it had been "re.searched" from a fileGruppe Konvertieren() zu schweben oder int-Format

Hier ist der Anfangscode ist, bezogen auf die akzeptierte Antwort auf die verknüpfte Frage:

import re 

VSP = input("Номер ВСП (четыре цифры): ") 

c = re.compile('(\d+\.226\.\S+)\s+\S+' + VSP) 
Tunnel0_IP_VSP = re.search(c, open('OUS_IP.txt').read()) 
print (Tunnel1_IP_VSP.group(1)) 

Номер ВСП (четыре цифры): 1020 
10.226.27.60 

finde ich konnte die angeforderte IP-Adresse in der Textdatei.

Mein Ziel ist es, die Zeichenfolge "10.226.27.60" irgendwie in ein Format zu konvertieren, das es mir erlauben würde, es in mathematischen Formeln zu verwenden. Zum Beispiel möchte ich eine andere Adresse "10.226.27.59" erhalten, indem ich 1 vom letzten Oktett der ursprünglichen Adresse subtrahiere.

+1

Sie sollten einige Zeit damit verbringen, sich durch das Tutorial (https://docs.python.org/3/tutorial/index.html) zu arbeiten und die Beispiele zu üben. Es wird Ihnen eine Einführung in die Werkzeuge geben, die Python zu bieten hat, und Sie können sogar Ideen für die Lösung Ihres Problems bekommen. – wwii

+0

Das ist wahr, aber ich muss mein Problem so schnell wie möglich lösen und mit deiner Hilfe könnte ich viel schneller lernen – Dover

+0

Du könntest die Strings durch '.' aufteilen und dann solltest du die natürliche Reihenfolge der resultierenden Strings finden brauche ... –

Antwort

4

Sie können das ipaddress Modul für Python 3:

>>> import ipaddress 
>>> ip = ipaddress.IPv4Address('10.226.27.60') 
>>> ip - 1 
IPv4Address('10.226.27.59') 

Die IPv4Address Klasse ermöglicht arithmetischen Operatoren

Docs: https://docs.python.org/3/library/ipaddress.html#operators

+0

Das ist gut, aber ich brauche so etwas wie ip = ipaddress.IPv4Address (Tunnel1_IP_VSP.Gruppe 1)). Das ist hier nicht möglich. – Dover

+0

@ user9100567 Warum ist es hier nicht möglich? –

+0

Ich entschuldige mich, das funktioniert und das ist die schnellste Entscheidung – Dover

2

Sie könnten die nehmen string (was Sie am Ende mit):

s = "10.226.27.60" 

und dann split auf '.' und list-comprehension verwenden, um die Teile zu integers konvertieren:

p = [int(i) for i in s.split('.')] 

und dann schließlich subtrahieren 1 aus dem letzten Element:

p[-1] -= 1 

zu erhalten p als:

[10, 226, 27, 59] 

Beachten Sie, wenn Sie diese Liste im ursprünglichen string Format angezeigt werden soll, dann können Sie join mit einem generator-expression verwenden:

".".join(str(i) for i in p) 
#"10.226.27.60" 
+0

Alternativ ''. '. Join (map (str, p)) ' –

1

Sie tun können:

string = "10.226.27.60".split(".") 
number_list = [int(number) for number in string] 
print(number_list) 

[10, 226, 27, 60] Sie jedes Element berechnen kann

konvertieren zurück:

string_again = ".".join(str(number) for number in number_list) 
print(string_again) 

10.226.27.60

Verwandte Themen