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}")
提取多个文件中指定字段并在错误的时候返回错误提示!
于 2025-03-18 09:30:00 首次发布