Seite 1 von 1

file I/O

Verfasst: Montag 17. Oktober 2005, 17:30
von lala
Hey,

mein Problem:
Ich will ein datensatz mit struct packen, den ich als txt-file habe. Lese ich den file ein verwandelt mir python jedes \ in \\. Will ich aber nicht, versteht struct nämlich nicht.

:(

Verfasst: Montag 17. Oktober 2005, 18:26
von jens
Das könnte evtl. nur ein Anzeige-"Problem" sein. Also das \\ angezeigt wird, es aber in wirklichkeit nur ein \ ist!

Verfasst: Montag 17. Oktober 2005, 22:17
von BlackJack
Wie siehst Du denn die doppelten '\\'? Wenn Du die Zeichenkette mit ``print repr(string)`` anzeigst, dann werden Sonderzeichen und alles was nicht "druckbar" ist mit Ersatzzeichenfolgen dargestellt, die mit einem '\' anfangen. Zeilenumbrüche zum Beispiel als '\n' oder Zeichen ausserhalb des ASCII Bereichs als Hexadezimalzahlen in der Form '\x??' wobei die Fragezeichen zwei Hex-Ziffern sind. Ein einfacher '\' wird dann als '\\' dargestellt damit es keine Mehrdeutigkeiten geben kann.

Die `repr()` Form wird auch in der interaktiven Python-Konsole ausgegeben.

Verfasst: Dienstag 18. Oktober 2005, 09:24
von lala
Vielen Dank für die Antworten erstma. Also, es ist so, ich hab einen Datensatz, der aus floats, integers, characters usw besteht. Das sieht z.B. so aus:

((0.51999998092651367, 2.1579999923706055, 'D', ':', '\\', 'E', 'D', 19392, 30626, 6, 0, 5115, 30623, -16384, 127, 155, 0, 6, 0, -2456, 18, 6313, 30623, -5560, 30626, -2456, '\xbb', '4', 7936, 18, 6076, 30623, 9, 0, 1, 0, 96, 0, 6149, 30623, 96, 0, 10656, 211, -976, 18, 13966, 30624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00' usw...

Den will ich jetzt mit Hilfe eines Formatcodes packen. Da struct.pack weder Liste noch tuple noch sting annimmt, weiß ich mir nur mit eval(struct.pack(formatstr,datenstr)) zu helfen. Wenn ich die Datendatei öffne wird aus '\xbb' '\\xbb und aus '\x00' '\\x00'. Dann krieg ich aber ne Fehlermeldung von python, da er das nicht mehr als Hexadezimalstelle annimmt.

Habt ihr ne bessere Idee?

Dank.
lala

Verfasst: Dienstag 18. Oktober 2005, 12:00
von rayo
Hi

Vielleicht hilft dir das:

Code: Alles auswählen

struct.pack(formatstr,*datenstr)
Gruss