2012-08-03 103 views
6

我有一段代碼經歷了幾次迭代。在每次迭代中,代碼都會生成一個基於numpy的數組。我將基於numpy的數組添加到現有的二進制.dat文件中。我使用下面的代碼來生成數據:以數組的形式讀取二進制.dat文件

WholeData = numpy.concatenate((Location,Data),axis=0) 
# Location & Data are two numpy arrays 
DataBinary = open('DataBinary.dat','ab') 
WholeData.tofile(DataBinary) 
DataBinary.close() 

我想讀取整個二進制文件到數組中。我有以下困難:

  1. 我嘗試下面的代碼:

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

    錯誤狀態:

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

  2. 我試圖使用基於陣列的陣列,然後閱讀文件放入數組中。

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

然而,NewData是錯誤的,即,它不一樣WholeData。我想保存數據爲numpy.array並將其讀取爲array.array可能不是一個好的選擇。

任何建議將不勝感激。

回答

16

我認爲numpy.fromfile是你想要的這裏:

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

,根據文檔還請注意,這不是數據存儲爲「精度和信息字節順序丟失」的最佳途徑。換句話說,您需要確保傳遞給dtype的數據類型與您最初寫入文件的內容兼容。

+0

這工作得很好!我會研究更好的方法來存儲數據。非常感謝,mgilson。 – Nazmul 2012-08-03 15:48:34

+0

這工作正常,以浮點形式讀取數據。但是,如果我想要讀取數據表,我應該怎麼做?我想保留原始的數據框維度。 – hmi 2016-12-30 03:57:24

0

從文件中讀取二進制列表:

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