'''
对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,但可以侥幸运行'''
python的文件I/O读取bin文件
于 2021-04-16 16:35:33 首次发布