Python读写二进制文件

读:

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 binascii
import struct
print(" -----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()



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值