提取多个文件中指定字段并在错误的时候返回错误提示!

import struct

def parse_uint64(data):
    """
    从二进制数据中解析出 uint64 类型的数据。

    :param data: 8 字节的二进制数据
    :return: 解析出的 uint64 值
    """
    return struct.unpack('<Q', data)[0]

def read_after_marker(file_path, marker, num_bytes):
    """
    从文件中读取特定标记后的数据段。

    :param file_path: 文件路径
    :param marker: 标记字节
    :param num_bytes: 每个数据段的字节数
    :return: 包含所有数据段的列表
    """
    with open(file_path, 'rb') as file:
        data = file.read()
        marker_positions = []
        position = 0

        while True:
            position = data.find(marker, position)
            if position == -1:
                break
            marker_positions.append(position)
            position += len(marker)

        results = []
        for pos in marker_positions:
            start_offset = pos + len(marker)
            result = data[start_offset:start_offset + num_bytes]
            results.append(result)

    return results

# 文件路径列表
file_paths = [
    r'1.bin',
    r'2.bin',
    r'3.bin',
    r'4.bin',
    r'5.bin',
]

# 读取并处理每个文件
for file_path in file_paths:
    try:
        binary_data_segments = read_after_marker(file_path, b'\x33\xdd', 125)

        for i, binary_data in enumerate(binary_data_segments):
            print(f"Data segment {i + 1} from file {file_path}:")

            # 提取字段
            ExposureTimeStamp = parse_uint64(binary_data[117:125])

            # 计算 MRR Obj Timestamps
            MRR_Obj_Timestamps = ExposureTimeStamp / 1000000

            # 打印格式化数据
            # print(f"  Index: {ExposureTimeStamp}")
            print(f"S1_MRR_Obj_Timestamps: {MRR_Obj_Timestamps:.6f}")

    except FileNotFoundError:
        print(f"文件未找到: {file_path},请检查文件路径。")
    except IOError:
        print(f"读取文件 {file_path} 时发生错误。")
    except struct.error:
        print(f"解析文件 {file_path} 的数据时发生错误。")
    except Exception as e:
        print(f"处理文件 {file_path} 时发生未知错误: {e}")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员 阿酷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值