python 处理二进制文件

贴代码备忘:

def parseBlockFile(filename):

global dic

fh=open(filename,”rb”)

fh.seek(0x180)

#read the # of blocks

blockNum=unpack(“H”,fh.read(2))[0]

print(“blockNum is %i”%blockNum)

index=0

while index < blockNum :
fh.seek(0x180 + index * 0xAFD + 2)
name=readStr(fh)
fh.read(1)  #skip the 00
codeNum=unpack("H",fh.read(2))[0]
if name in dic.keys() :
code=dic[name]
dic[name].append(codeNum)

fh.read(2) #skip the word
codeIndex=0
fh2=open("c:\\myR\\bankuai\\%s.txt"%name,"w")
while codeIndex < codeNum :
code=unpack("6s",fh.read(6))[0]
fh.read(1) #skip the 00

fh2.write(str(code,encoding="utf-8"))
fh2.write("\n")
codeIndex = codeIndex + 1
fh2.close()

index = index + 1

fh.close()

  说明下:

  • 4,10行的两个fseek都是跳到文件相对于文件开头的地址处,如果要根据当前位置移动,需要第二个参数设为1
  • 注意6,13行的unpack后面的[0] , 表示只取出第一个植
  • 25行,把字节流转换为字符串的方法。没做转换前不能直接把bytes写入文本文件。
  • 关于unpack , 要指定专有的格式,使用时需要查阅手册
  • 对于不定长字符串的读取,比较不方便,需要自己写函数来实现,因为unpack在指定格式时是需要指明长度的,因此需要先计算字符串的长度,再利用unpack来处理。


本文地址: http://www.bagualu.net/wordpress/archives/4635 转载请注明




发表评论

电子邮件地址不会被公开。 必填项已用*标注