无法获取结构以读取整个二进制文件。
我成功地提取了所有头信息,然后只提取了数据的一部分。数据段是123,410个双精度数,但是在检索到62个数字之后,我不能再深入了,struct.unpack指示字符串参数的长度错误。我设置了一个循环,一次获取一个数字,但它在相同的位置停止。该文件未损坏,将在原始软件中打开。有没有人有解决这个问题的建议?
选择 | 换行 | 行号
- import struct, string, os
- bf = "F:/Junker/TestT/TU_TSA.grd"
- wbf = open(bf).read() # "rb")
- start, stop = 0, struct.calcsize('<7l8d2l')
- #Retrieve the header information
- try:
- TheadID,TheadSize,HSver,TgridID,TgridSize,nRow,nCol,xLL,yLL,xSize,ySize,zMin,zMax,\
- Rotation,BlankVal,TdataID,TdataSize = struct.unpack('<7l8d2l', wbf[start:stop])
- except:
- print "Problem reading Header"
- print "TheadID ", TheadID, "\n ", "TheadSize ",TheadSize,"\n ","HSver ", HSver,"\n ","TheadID ",TgridID,"\n ","TgridSize ",TgridSize,"\n ","nRow ",nRow,"\n ","nCol ",nCol,"\n ","xLL ",xLL,"\n ","yLL ",yLL,"\n ","xSize ",xSize,"\n ","ySize ",ySize,"\n ","zMin ",zMin,"\n ","zMax ",zMax,"\n ","Rotation ",Rotation,"\n ","BlankVal ",BlankVal,"\n ","TdataID ",TdataID,"\n ","TdataSize",TdataSize
- #Retrieve the data
- try:
- x = nCol * nRow
- while x:
- start, stop = stop, stop + struct.calcsize('<d')
- DataBlock = struct.unpack('<d', wbf[start:stop])
- print DataBlock, " start ",start, " stop ",stop
- except:
- print "Failed at: start ",start, " stop ",stop
- del TheadID,TheadSize,HSver,TgridID,TgridSize,nRow,nCol,xLL,yLL,xSize,ySize,zMin,zMax,\
- Rotation,BlankVal,TdataID,TdataSize,start,stop