私はPythonの初心者です。私はむしろ深いところに投げ込まれました。少し背景があります。私たちが読んでいるファイルは、ソナーイメージングカメラからのものです。現時点では、日付、ファイル名、フレーム数、ビーム数など、ファイルに書き込まれた属性を読み込もうとしています。まず、FILEヘッダーを読みたいと思います。次に、フレームごとに、FRAMEヘッダーを読み取ります。ファイルヘッダーが中断したフレームヘッダーを読み込む必要があります...これを実行するには、seek()が必要だと思います。これが私が現在持っているコードで、ファイルヘッダーを読み取り(正常に実行され)、フレームヘッダーの情報が終了するところから開始します。
編集されたコード:
import math, struct
def __init__(didson):
print "this better work"
def get_file_header(data,offset=0):
fileheader={}
winlengths=[1.125,2.25,4.5,9,18,36]
fileheader['filetype']=struct.unpack("3s",didson_data[0:3])
fileheader['fileversion']=struct.unpack('B',didson_data[3:4])[0]
fileheader['numframes']=struct.unpack('l',didson_data[4:8])
fileheader['framerate']=struct.unpack('l',didson_data[8:12])
fileheader['resolution']=struct.unpack('i',didson_data[12:16])
fileheader['numbeams']=struct.unpack('i',didson_data[16:20])
fileheader['samplerate']=struct.unpack('f',didson_data[20:24])
fileheader['samplesperchannel']=struct.unpack('l',didson_data[24:28])
fileheader['receivergain']=struct.unpack('l',didson_data[28:32])
fileheader['windowstart']=struct.unpack('i',didson_data[32:36])
fileheader['winlengthsindex']=struct.unpack('i',didson_data[36:40])
fileheader['reverse']=struct.unpack('l',didson_data[40:44])
fileheader['serialnumber']=struct.unpack('l',didson_data[44:48])
fileheader['date']=struct.unpack("10s",didson_data[48:58])
#fileheader['???']=struct.unpack('26s',didson_data[58:84])
fileheader['idstring']=struct.unpack("33s",didson_data[84:117])
#fileheader['????2']=struct.unpack('235s',didson_data[117:352])
fileheader['framestart']=struct.unpack('i',didson_data[352:356])
fileheader['frameend']=struct.unpack('i',didson_data[356:360])
fileheader['timelapse']=struct.unpack('i',didson_data[360:364])
fileheader['recordInterval']=struct.unpack('i',didson_data[364:368])
fileheader['radioseconds']=struct.unpack('i',didson_data[368:372])
fileheader['frameinterval']=struct.unpack('i',didson_data[372:376])
return fileheader
def num_datagrams(didson_data):
assert(len(didson_data) % datagram_size==0)
return len(didson_data)/datagram_size
def get_offset(datagram_number):
return datagram_number * datagram_size
def didson_print(fileheader):
print fileheader
for key in fileheader:
print ' ',key, fileheader[key]
def main():
didson_file=open('C:/vprice/DIDSON/DIDSON Data/test.ddf', 'rb')
didson_data=didson_file.read()
print 'Number of datagrams:', num_datagrams(didson_data)
didson_print(datagram)
if __name__=='main':
main()
「main」を実行すると、1行ずつ読み取ることができますか?1行に1つの値かどうかはわかりませんが、基本的にはバイトごとに調べて、どのヘッダー値がどこにあるかを調べました。
どんな助けでもいただければ幸いです!!