python的文件I/O读取bin文件

'''
对bin文件的内容进行增删改查
'''
import os

#拷贝文件 文件名位file_bak
def file_copy(file):
    file_head,file_tail=file.split('.')
    new_file=file_head+"_bak."+file_tail
    with open(file,"rb") as f0,open(new_file,"wb+") as f1:
        for i in range(os.path.getsize(file)):
            date=f0.read(1)
            f1.write(date)
    f0.close()
    f1.close()

#删除文件数据 得到文件file_del
def file_del_date(file):
    file_head,file_tail=file.split('.')
    new_file=file_head+"_del."+file_tail

    index=32     #从第32个位置开始删除256个字节
    size =256

    with open(file,"rb") as f0,open(new_file,"wb+") as f1:
        for i in range(os.path.getsize(file)):
            date=f0.read(1)
            if i<index or i>int(index+size):  #写入不在索引范围内的数据
                f1.write(date)
    f0.close()
    f1.close()

#插入文件数据 得到文件file_insert
def file_insert_date(file):
    file_head,file_tail=file.split('.')
    new_file=file_head+"_insert."+file_tail

    index=48    #在48的位置插入文件后面的数据
    insert_file="jiami1.bin"

    size0=os.path.getsize(file)        #插入文件的大小
    size1=os.path.getsize(insert_file)   #要被插入的文件大小

     #拷贝文件  将源文件拷贝到new.bin中
    file_bak="new.bin"    
    with open(file,"rb") as f0,open(file_bak,"wb+") as f1:
        for i in range(os.path.getsize(file)):
            date=f0.read(1)
            f1.write(date)
    f0.close()
    f1.close()

    #将所有的都写入新文件中
    f2=open(new_file,"wb+")  
    f3=open(file_bak,"rb")
    f4=open(file,"rb")

    for i in range(int(index)):
        date=f3.read(1)
        f2.write(date)
    for i in range(size0):
        date=f4.read(1)
        f2.write(date)
    for i in range(int(index)+size0,size1+size0):   #文件的后半部分写入
        date=f3.read(1)
        f2.write(date)
    f2.close()
    f3.close()
    f4.close()

    os.remove(file_bak)  #删除中间文件

#对文件进行数据添加(尾插)  得到文件file_add
def file_add_date(file):
    file_head,file_tail=file.split('.')
    new_file=file_head+"_new_ab."+file_tail

    #拷贝文件,然后追加
    with open(file,"rb") as f0,open(new_file,"wb+") as f1:
        for i in range(os.path.getsize(file)):
            date=f0.read(1)
            f1.write(date)
    f0.close()
    f1.close()

    
    add_file="jiami1.bin"
    with open(file,"ab+") as f0,open(new_file,"rb+") as f1:
        for i in range(os.path.getsize(file)): #文件大小字节
            date=f1.read(1)
            f0.write(date)
    f0.close()
    f1.close()

#查看文件后的16进制数据
def ReadFile(file):
    ls=[]
    f=open(file,'rb')   #二进制打开文件
    size =os.path.getsize(file)  #获取文件大小
    for i in range(size):
        date =str(f.read(1)) 
        ls.append(date[2:-1])
        print("%s"%date[2:-1],end=' ')
        if (i+1)%16==0:
            print()
    f.close()
    return ls

#找二进制数据
def file_find_date(file):
    new_file="jiami1.bin"
    f=open(new_file,"rb")
    date=f.read()
    f.close()
    
    size0=os.path.getsize(new_file)  #要查找的二进制数据大小
    size1=os.path.getsize(file)
    f0=open(file,"rb")
    for i in range(size1-size0):
        if f0.read(size0)==date:
            print("找到在%d个字节处\n"%i)
            return i      #返回第一个的索引号
        else:
            f0.seek(0,0) #指针归零
            f0.read(i)   #为下一次读取做预备
    print("没找到对应的数据!\n\n")
    return -1

if __name__=="__main__":
    file="jiami0.bin"
    file_copy(file)
    file_del_date(file)
    file_add_date(file)
    file_insert_date(file)
    file_find_date(file)
    ReadFile(file)

'''代码还有bug,但可以侥幸运行''' 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值