吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 763|回复: 2
收起左侧

[求助] Python 二进制读取的问题--缓冲区有可能只包含一部分头部二进制数据

[复制链接]
头像被屏蔽
jinzhu160 发表于 2022-5-28 16:47
提示: 作者被禁止或删除 内容自动屏蔽

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

unmask 发表于 2022-5-28 16:47
[Python] 纯文本查看 复制代码
filePath1 = r'.\data\txt'
fileheaders = b'\x88\x88\x88\x88\x88'
filetails = b'\x99\x99\x99\x99\x99\x99\x99\x99\x99'

resultfile = r'.\data\result'

def read_in_block(file_path, resultfile):
    BLOCK_SIZE = 16  #设置每次读取 16个字节
    ended = -1
    started = -1
    with open(file_path, "rb") as r:
        with open(resultfile, "wb+") as w:
            block = r.read(BLOCK_SIZE)
            if not block: return
            while True:
                blockNext = r.read(BLOCK_SIZE)  #每次读取固定长度到内存缓冲区
                if blockNext:
                    buff = block + blockNext
                    if started <= -1:
                        # 没有开始,继续查找开始标志
                        started = buff.find(fileheaders)

                    #处理逻辑
                    if started > -1:
                        # 已经开始,继续查找结束标志
                        ended = buff.find(filetails)
                        # 如果结束标志找到,修正结束位置
                        if ended > -1: ended += len(filetails)
                        # 写入文件,找到结束位置,写buff,只找到开始位置,写block
                        a = buff[started:ended] if ended > -1 else block[started:]
                        w.write(a)
                        # 修正开始位置为下一block的开始位置
                        started = 0 if started < BLOCK_SIZE else started - BLOCK_SIZE

                    if ended > -1:
                        # 已经结束
                        break

                    # 缓存数据
                    block = blockNext
                else:
                    return  #如果读取到文件末尾,则退出

read_in_block(filePath1, resultfile)
print('运行结束')
unmask 发表于 2022-5-29 14:17
open的时候,可以不指定buffer,不会内存异常,因为open动作没有真正的读取文件内容,只有在read操作时才需要指定buffer,不然会默认读取所有内容报内存异常。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表