Binäre Datei in CSV-Datei

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.
professor_rumsdiegeige
User
Beiträge: 5
Registriert: Dienstag 6. Januar 2009, 15:28

Binäre Datei in CSV-Datei

Beitragvon professor_rumsdiegeige » Donnerstag 12. März 2009, 21:25

Hallo, ich versuche eine binäre Datei mit 2 Zahlen in eine ASCII-CSV-Datei zu verwandeln:

Code: Alles auswählen

fr = open(infile, mode='rb')
a.read(fr,2*1);
print a
   
fw = open(outfile,mode='wt')
a.write(fw)


"print a" führt zu: "array('d', [202.01, 202.01])" - wie erwartet.

In der erzeugten Datei steht aber: "303@i@303@i@" also komische Zeichen ... was geht da vor? Was mach ich falsch?


Danke für Eure Hilfe!
Sabine Lorentz
Benutzeravatar
martin101986
User
Beiträge: 85
Registriert: Montag 3. Dezember 2007, 19:15
Wohnort: Steiermark, Österreich

Beitragvon martin101986 » Donnerstag 12. März 2009, 21:36

Hallo,

du solltest den Inhalt deiner Datei fw mit fw.read() auslesen und diesen dann in deine neue Datei speichern.

So wie du es machst speicherst du dein Fileobjekt in der neuen Datei.

Grüße Martin
BlackJack

Beitragvon BlackJack » Donnerstag 12. März 2009, 22:12

@professor_rumsdiegeige: Du solltest mal verraten was `a` ist. Und oder selber die Dokumentation von der `write()`-Methode lesen. So wie's aussieht schreibst Du einfach die beiden Zahlen wieder als Binärdaten im C-double-Format in eine Datei. Also das Gegenstück zum `read()`. In sofern ist das IMHO auch nicht überraschend. Ich würde mich jedenfalls beschweren wenn `write()` etwas schreiben würde, was man später mit `read()` nicht wieder einlesen kann.
professor_rumsdiegeige
User
Beiträge: 5
Registriert: Dienstag 6. Januar 2009, 15:28

Beitragvon professor_rumsdiegeige » Samstag 14. März 2009, 09:27

Hallo,

'a' sind (wie schon erraten) einfach C-Double-Zahlen zwischen 0 und 300. Diese wurden mit einem C-Programm binär abgespeichert.

Ich benötige nun genau diese Zahlen in einer Textdatei, also nicht binär, das ist alles.

Grüße
Sabine
BlackJack

Beitragvon BlackJack » Samstag 14. März 2009, 09:35

Aber was ist `a` denn nun für ein *Python*-Typ?

Wenn `a` das Sequenzprotokoll unterstützt oder mindestens "iterable" ist, kannst Du doch einfach mit `map()` und `str()` die Zahlen in Zeichenketten wandeln und mit Hilfe des `csv`-Moduls in eine CSV-Datei schreiben!?
professor_rumsdiegeige
User
Beiträge: 5
Registriert: Dienstag 6. Januar 2009, 15:28

Beitragvon professor_rumsdiegeige » Samstag 14. März 2009, 09:44

sorry, falsch verstanden;

Code: Alles auswählen

import os, glob, array, csv, sys
a = array.array('d')

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder