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

file I/O

Beitragvon 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » 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

Beitragvon 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

Beitragvon 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:

Beitragvon rayo » Dienstag 18. Oktober 2005, 12:00

Hi

Vielleicht hilft dir das:

Code: Alles auswählen

struct.pack(formatstr,*datenstr)


Gruss

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], jan.b