file I/O

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
lala

Montag 17. Oktober 2005, 17:30

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.

:(
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 17. Oktober 2005, 18:26

Das könnte evtl. nur ein Anzeige-"Problem" sein. Also das \\ angezeigt wird, es aber in wirklichkeit nur ein \ ist!

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Montag 17. Oktober 2005, 22:17

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.
lala

Dienstag 18. Oktober 2005, 09:24

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
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Dienstag 18. Oktober 2005, 12:00

Hi

Vielleicht hilft dir das:

Code: Alles auswählen

struct.pack(formatstr,*datenstr)
Gruss
Antworten