2012-08-03 10 views
6

Ich habe einen Code, der mehrere Iterationen durchläuft. In jeder Iteration generiert der Code ein numpy basiertes Array. Ich füge das numpy-basierte Array an eine vorhandene binäre DAT-Datei an. Ich verwende den folgenden Code, um die Daten zu generieren:Eine binäre .dat-Datei als Array lesen

Ich versuche, die gesamte Binärdatei in ein Array zu lesen. Ich habe folgende Schwierigkeiten:

  1. ich den folgenden Code versucht:

    NewData = numpy.array('f') 
    File1 = open('DataBinary.dat','rb') 
    NewData.fromstring(File1.read()) 
    File1.close() 
    

    Fehlerstatus:

    Traceback (most recent call last): File "", line 1, in AttributeError: 'numpy.ndarray' object has no attribute 'fromstring'

  2. Ich habe versucht, ein Array basierten Array zu verwenden und dann lesen Sie die Datei in das Array ein.

    from array import array 
    File1 = open('DataBinary.dat','rb') 
    NewData.fromstring(File1.read()) 
    File1.close() 
    

Jedoch ist NewData irrtümliche, das heißt, es als WholeData nicht gleich ist. Ich denke, dass das Speichern der Daten als numpy.array und das Lesen als array.array möglicherweise keine gute Option ist.

Jeder Vorschlag wird geschätzt.

Antwort

16

Ich denke, dass numpy.fromfile ist, was Sie hier wollen:

import numpy as np 
myarray = np.fromfile('BinaryData.dat',dtype=float) 

Beachten Sie auch, dass nach der Dokumentation, ist dies nicht der beste Weg, um Daten zu speichern als „Informationen über Präzision und endianness ist verloren“ . Mit anderen Worten, Sie müssen sicherstellen, dass der Dateityp, der an dtype übergeben wird, mit dem kompatibel ist, was Sie ursprünglich in die Datei geschrieben haben.

+0

Dies funktioniert gut! Ich werde nach den besseren Methoden zum Speichern von Daten suchen. Vielen Dank, mgilson. – Nazmul

+0

Das funktioniert gut, um die Daten als Float zu lesen. Aber was soll ich tun, wenn ich eine Datentabelle lesen möchte? Ich möchte die ursprüngliche Datenrahmendimension beibehalten. – hmi

0

Um binäre aus der Datei zu lesen Liste:

list_int = [ord(i) for i in fd.read()] 
Verwandte Themen