2017-06-08 43 views
0

背景: 好日子,我需要從設備生成的二進制文件中提取信息。該設備帶有一個matlab函數來導入二進制文件。從我從手動了解,二進制文件包含一個64位浮點值問題0和1之間將二進制文件中的64位浮點值導入python

function phase = importData(folder, qUnit); 

fileName = sprintf('%s\\%s.PH', folder, qUnit); 

file = fopen(fileName, 'rb'); 

fseek(file, 0, 'bof'); 
phase = fread(file, inf, 'float64'); 

:MATLAB函數工作正常,但我希望將數據導入到蟒蛇。我可以知道如何在Python上完成這項工作嗎?我自己做了一些研究,並在底部嘗試了類似的東西。但是當我打印(fileContent)來檢查導入的數據時,python只是停止響應在窗口中。

with open('sample.PH', mode='rb') as binary_file: 
    fileContent = binary_file.read() 

回答

0

你不能像這樣讀取二進制文件到一個有用的形式。你應該使用numpy.fromfile。這將爲您提供一個數據向量,與您在MATLAB中獲得的數據類似。你甚至不需要打開它(雖然你可以如果你想)。只需給它一個文件名,它就會自動打開,讀取,然後關閉文件。

import numpy as np 

file_content = np.fromfile('sample.PH', np.float64) 

編輯:這裏是你如何能做到多重複值:

import numpy as np 

file_content = np.fromfile('sample.PH', [('data', np.float32), 
             ('time', np.float64)]) 

(我把最後一行的兩行清晰,它可能是,如果你喜歡的一條線,或10這一點,蟒蛇並不在意)

這會給你一個等效的MATLAB struct其中一個字段是數據,另一個字段是時間。然後您可以使用file_content['data']訪問數據,使用file_content['time']訪問數據。上面提供的鏈接中有更多信息。

+0

非常感謝你TheBlackCat。你一直在幫助很大,你的方法有效! 我剛剛意識到我有另一個問題,我正在使用的二進制文件之一包含一個32位浮點值Data,緊接着是一個代表數據記錄時間的64位值。 這是怎麼看起來像在提供MATLAB函數。 'code' fseek(file,0,'bof'); data = fread(file,inf,'float32',8); fseek(file,4,'bof'); data_tm = fread(file,inf,'float64',4); '代碼' 這可以使用numpy實現嗎?編輯:抱歉雜亂的帖子,插入新行不工作。 –

+0

@RaymondWong我剛剛更新了我的答案來回答這個問題。請再看看我的答案。另外,如果這回答您的問題,請將其標記爲已接受。 – TheBlackCat

相關問題