Python读写二进制文件

来源:互联网 发布:双十一数据作假 编辑:程序博客网 时间:2024/06/08 10:59

读:

file模式'rb'

import binascii

s_16 = binascii.b2a_hex(f.read(1))#2--->16


写:

file模式'wb'

import struct

f.write(struct.pack('B',int(s_16,16)))#16--->10,此处若不将16进制数据转换成10进制在转换成字节流直接写进文件的话,会与原文件不同


struct.pack用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,可以把这里的字符串理解为字节流,或字节数组)。

struct.unpack做的工作刚好与struct.pack相反,用于将字节流转换成python数据类型。它的函数原型为:struct.unpack(fmt, string),该函数返回一个元组

C语言中常用类型与Python类型对应的格式符:

格式符C语言类型Python类型注xpad byteno value ccharstring of length 1 bsigned charinteger Bunsigned charinteger ?_Boolbool hshortinteger Hunsigned shortinteger iintinteger Iunsigned intinteger or long llonginteger Lunsigned longlong qlong longlong Qunsigned long longlong ffloatfloat ddoublefloat schar[]string pchar[]string Pvoid *long
下面是一个简单的文件加密程序,将字节流前四位取出做异或操作连同其余字节写入新文件,再次运行即可解密。

import binasciiimport structprint(" -----encoder-----")frPath = raw_input("Enter source path: ")fwPath = raw_input("Enter target path: ")keys = [9,4,8,6]try:    fr = file(frPath,'rb')    fw = file(fwPath,'wb')    for i in range(4):        fr.seek(i)        s_16 = binascii.b2a_hex(fr.read(1))        s_10 = int(s_16,16)        s_10NO = s_10 ^ keys[i]        s_10NOvalue = struct.pack('B',s_10NO)                fw.write(s_10NOvalue)        fw.write(fr.read())except IOError:    print("----------------------------------------")    print("Progress error")finally:    print("----------------------------------------")    print("done successfully")    fr.close()    fw.close()



原创粉丝点击