我有一個二進制文件,我想用python閱讀。我知道前493個字節是x值,接下來的87個字節是y值,最後的147個字節是z值。我已經寫了一些代碼,應該做到這一點,如下圖所示:在Python中讀取二進制文件
with open("file", "rb") as fileHandle:
byte = fileHandle.read(1)
datax = []
datay = []
dataz = []
dim_x = 493
dim_y = 87
dim_z = 147
while fileHandle.tell() < dim_x + dim_y + dim_z:
byte = fileHandle.read(1)
if fileHandle.tell() < dim_x:
datax.append(byte)
if dim_x < fileHandle.tell() < dim_x + dim_y:
datay.append(byte)
if dim_x + dim_y < fileHandle.tell() < dim_x + dim_y + dim_z:
dataz.append(byte)
print fileHandle.tell()
print len(fileHandle.read())
然而,當我比較fileHandle.tell()
和len(fileHandle.read())
分別產生727和6304250。這意味着我只能獲取我的數據的一部分?我認爲fileHandle.read(1)會逐字節地逐步掃描文件?我在這裏錯過了什麼?
請注意,如何在Python中的簡單輪廓圖中繪製這些數據? matplotlib是要走的路嗎?
Stackoverflow的設計使問題和答案形成了一個未來可以使用的解決方案的存儲庫。一次提出兩個問題打破了這種模式 - 請將其分成兩個問題。 – Brionius
您已經構建了'while'循環,以便它繼續,直到您位於文件中的位置727。顯然你的文件比這更長 - 6304250 + 727 = 6304977字節。爲什麼你認爲你的文件只有727字節長? – Brionius
'len(fileHandle.read())'告訴你讀取了727個文件後,文件中有多少個_unread_字節。如果文件的位置接近這麼長,那麼您必須誤解它的格式。奇怪的是,沒有相同數量的x,y和z值(更不用說它們只有一個字節值)。 – martineau