Seite 1 von 1
String nach Tupel konvertieren
Verfasst: Freitag 28. Juli 2006, 14:03
von michaelbierenfeld
Hallo
ab und zu darf ich auch mal wieder programmieren. Also wie kann ich denn den String aus einem snmp request
.1.3.6.1.4.1.2562.1.1.8.1.1.8.3.85.67.52.1871.1201184.4 = STRING: JOBS.UNIX.C2.INFODB
in den Tupel
(oid, typ, value)
zerlegen. Wobei in diesm Beispiel
oid = 1.3.6.1.4.1.2562.1.1.8.1.1.8.3.85.67.52.1871.1201184.4
type = STRING:
value = JOBS.UNIX.C2.INFODB
ist.
Beste Gruesse
Michael
Verfasst: Freitag 28. Juli 2006, 14:16
von Nirven
mit split(' ') trennst du nach Leerzeichen, dann hast du zwar noch das Leerzeichen im Tupel aber der Rest passt schonmal. Das Leerzeichen kann man dann auch entfernen, und fertig (das entfernen geht doch bestimmt auch kürzer?).
>>> x = '1.3.6.1.4.1.2562.1.1.8.1.1.8.3.85.67.52.1871.1201184.4 = STRING: JOBS.UNIX.C2.INFODB'
>>> y = x.split(' ')
>>> z = y[0],y[2],y[3]
>>> z
('1.3.6.1.4.1.2562.1.1.8.1.1.8.3.85.67.52.1871.1201184.4', 'STRING:', 'JOBS.UNIX.C2.INFODB')
Verfasst: Freitag 28. Juli 2006, 14:23
von michaelbierenfeld
Hi,
ja so was ähnliches geht in die Richtung. Nur mir schwebt so was wie
vor. Gehen wuerde
Code: Alles auswählen
# split zeugs
(oid, typ, val) = (splitted [0], splitted [1], splitted [3])
Ich hätte es nur gerne eleganter um bei den Java Leuten angeben zu können
Grüße
Michael
Verfasst: Freitag 28. Juli 2006, 14:39
von DatenMetzgerX
Code: Alles auswählen
x =".1.3.6.1.4.1.2562.1.1.8.1.1.8.3.85.67.52.1871.1201184.4 = STRING: JOBS.UNIX.C2.INFODB"
x = x.replace(' = ', ';').replace(': ', ';').lstrip('.')
oid, typ, value = x.split(';')
print '%s\n%s\n%s' % (oid, typ, value)
Oder
Code: Alles auswählen
x =".1.3.6.1.4.1.2562.1.1.8.1.1.8.3.85.67.52.1871.1201184.4 = STRING: JOBS.UNIX.C2.INFODB"
oid, typ, value = x.replace(' = ', ';').replace(': ', ';').lstrip('.').split(';')
print '%s\n%s\n%s' % (oid, typ, value)
Resultat bei beiden
Code: Alles auswählen
1.3.6.1.4.1.2562.1.1.8.1.1.8.3.85.67.52.1871.1201184.4
STRING
JOBS.UNIX.C2.INFODB
Verfasst: Freitag 28. Juli 2006, 15:01
von michaelbierenfeld
Super,
dieses
Code: Alles auswählen
wert0, wert1, wert2 = "michael bierenfeld unsinn".split ()
war mir nicht bewußt.
Danke
Michael
Verfasst: Freitag 28. Juli 2006, 21:35
von Joghurt
michaelbierenfeld hat geschrieben:
Gewöhne dir mal die Leerzeichen nach Funktions und Variablennamen ab. Das ist unbequem zu lesen. Schließlich bezieht sich das [0] direkt auf splitted.
http://www.python.org/dev/peps/pep-0008/
Verfasst: Freitag 28. Juli 2006, 22:27
von BlackJack
michaelbierenfeld hat geschrieben:ja so was ähnliches geht in die Richtung. Nur mir schwebt so was wie
vor. Gehen wuerde
Code: Alles auswählen
# split zeugs
(oid, typ, val) = (splitted [0], splitted [1], splitted [3])
Ich hätte es nur gerne eleganter um bei den Java Leuten angeben zu können
Wenn Du magische Einzeiler elegant findest, dann solltest Du Dir mal Perl anschauen. In Python ist es eleganter eine Funktion zu schreiben, die robust ist und bei der man verstehen kann was sie tut.
Verfasst: Samstag 29. Juli 2006, 11:17
von CrackPod
BlackJack hat geschrieben:michaelbierenfeld hat geschrieben:
Wenn Du magische Einzeiler elegant findest[...]
Was is denn daran magisch?
Code: Alles auswählen
x =".1.3.6.1.4.1.2562.1.1.8.1.1.8.3.85.67.52.1871.1201184.4 = STRING: JOBS.UNIX.C2.INFODB"
oid, typ, value = x.replace(' = ', ';').replace(': ', ';').lstrip('.').split(';')
print '%s\n%s\n%s' % (oid, typ, value)
Das is auch nur ne ganz normale Pythonanweisung, nur dass sie halt - nich wirklich übersichtlich - in eine Zeile geschrieben wurde.
Greetz
Verfasst: Samstag 29. Juli 2006, 11:41
von BlackJack
CrackPod hat geschrieben:BlackJack hat geschrieben:michaelbierenfeld hat geschrieben:
Wenn Du magische Einzeiler elegant findest[...]
Was is denn daran magisch?
Da steht das an der Stelle des Kommentars eine magische Python-Anweisung stehen soll.
Verfasst: Montag 31. Juli 2006, 00:29
von Mad-Marty
Öhm anstelle von dieser funktionalität zu schreiben schlage ich vor du verwendest die methoden der snmp library.
Strings zerlegen ... aber doch bitte nicht bei sowas.
z.b. bei pysnmp kriegst du automatisch den wert mit dem richtigen datentyp.
auch wunderbar mit oid:value tupeln.
Verfasst: Montag 31. Juli 2006, 09:42
von michaelbierenfeld
Hallo,
pysnmp habe ich mir angeschaut. In meinem Fall ist das wie mit Kanonen auf Spatzen geschossen. Besten Dank aber
Michael