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

Code: Alles auswählen

oid, typ, val = # Magische Python Anweisung
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:

Code: Alles auswählen

split ()
...
splitted [0]
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

Code: Alles auswählen

oid, typ, val = # Magische Python Anweisung
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:

Code: Alles auswählen

oid, typ, val = # Magische Python Anweisung
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:

Code: Alles auswählen

oid, typ, val = # Magische Python Anweisung
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