Seite 1 von 1

Binäre Datei in CSV-Datei

Verfasst: Donnerstag 12. März 2009, 21:25
von professor_rumsdiegeige
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

Verfasst: Donnerstag 12. März 2009, 21:36
von martin101986
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

Verfasst: Donnerstag 12. März 2009, 22:12
von BlackJack
@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.

Verfasst: Samstag 14. März 2009, 09:27
von professor_rumsdiegeige
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

Verfasst: Samstag 14. März 2009, 09:35
von BlackJack
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!?

Verfasst: Samstag 14. März 2009, 09:44
von professor_rumsdiegeige
sorry, falsch verstanden;

Code: Alles auswählen

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