我是 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”,我可以逐行阅读吗?我不确定它是否是每行一个值...我基本上逐个字节地计算出哪些标头值位于何处。
任何帮助,将不胜感激!!