一个解析cyber record文件的python示例脚本

news/2025/2/23 22:13:50

Cyber RT 是百度开源的一个高性能、灵活的机器人操作系统,cyber record 是 Cyber RT 中用于录制和回放数据的工具。下面是一个使用 Python 解析 cyber record 文件的示例,该示例使用 cyber_py 库(Cyber RT 的 Python 绑定)来读取记录文件并打印消息信息。

目录

一、环境准备

二、示例代码

三、使用说明

四、关键实现说明


一、环境准备

确保已经安装了 Cyber RT 开发环境,并且 cyber_py 库可以正常使用。

二、示例代码

以下是一个基于 cyber_py3 库的 Cyber Record 文件解析示例代码,支持读取目录或单个文件,并自动过滤非 Record 文件:

python">import argparse
import os
from cyber_py3 import record
from cyber_py3.record import RecordReader, RecordWriter, RecordMessage

def parse_record_file(file_path):
    """
    解析单个 Cyber Record 文件
    """
    try:
        reader = RecordReader(file_path)
        print(f"\n===== 正在解析文件: {os.path.basename(file_path)} =====")
        print(f"总消息数: {reader.get_messagenumber()}")
        print(f"开始时间: {reader.get_starttime()}")
        print(f"结束时间: {reader.get_endtime()}")
        print(f"通道列表: {reader.get_channellist()}\n")

        # 遍历所有消息
        for channel_name, msg, datatype, timestamp in reader.read_messages():
            print(f"[通道] {channel_name}")
            print(f"  时间戳: {timestamp}")
            print(f"  数据类型: {datatype}")
            print(f"  消息长度: {len(msg)} bytes")
            print("-" * 60)

    except Exception as e:
        print(f"解析文件 {file_path} 失败: {str(e)}")

def parse_record_directory(directory):
    """
    解析目录下的所有 Cyber Record 文件
    """
    if not os.path.isdir(directory):
        print(f"错误: {directory} 不是有效目录")
        return

    for filename in os.listdir(directory):
        file_path = os.path.join(directory, filename)
        
        # 通过文件头验证是否为合法 Record 文件
        if record.is_valid_record_file(file_path):
            parse_record_file(file_path)
        else:
            print(f"跳过非 Record 文件: {filename}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Cyber Record 文件解析工具')
    parser.add_argument('path', type=str, help='文件路径或目录路径')
    args = parser.parse_args()

    target_path = args.path

    if os.path.isfile(target_path):
        if record.is_valid_record_file(target_path):
            parse_record_file(target_path)
        else:
            print(f"错误: {target_path} 不是有效的 Cyber Record 文件")
    elif os.path.isdir(target_path):
        parse_record_directory(target_path)
    else:
        print(f"错误: {target_path} 不存在")

三、使用说明

  1. 运行示例

    # 解析单个文件
    python parse_record.py /path/to/your.record
    
    # 解析目录
    python parse_record.py /path/to/record_dir/
  2. 功能特性

    • 自动验证文件有效性(通过文件头校验)

    • 显示文件元信息:消息数量、时间范围、通道列表

    • 支持解析消息头信息(通道、时间戳、数据类型)

    • 自动跳过无效文件和非 Record 文件

四、关键实现说明

  1. 文件验证

    • 使用 record.is_valid_record_file() 方法进行二进制验证

    • 比单纯检查文件扩展名更可靠

  2. 消息遍历

    • reader.read_messages() 生成器逐条读取消息

    • 返回元组:(channel_name, message, data_type, timestamp)

  3. 性能优化

    • 按需解析消息内容(当前示例仅读取元信息)

    • 支持大文件流式读取(不加载全部内容到内存)


http://www.niftyadmin.cn/n/5863818.html

相关文章

迎接2025,立个flag

2025计划书 博客更新时间 每周二、周四、周天晚上20:00-23:00间进行更新 博客内容粗略版规划 1、 大模型相关论文分享(数据标注、COT、prompt等方向) 2、强化学习数学理论(内容偏数学,故周天晚上更新) 3、…

Python常见面试题的详解17

1. 说明HTTP 和 HTTPS的区别 安全性:HTTP 是明文传输协议,这意味着在数据传输过程中,信息就像在 “裸奔”,容易被窃取和篡改,安全性堪忧。而 HTTPS 是在 HTTP 基础上加入了 SSL/TLS 协议,通过加密和身份验证…

Java 虚拟机(JVM)方法区详解

文章目录 Java 虚拟机(JVM)方法区详解1. 什么是方法区?2. 方法区的作用3. 方法区的存储内容3.1 类的元数据(Class Metadata)3.2 运行时常量池(Runtime Constant Pool)3.3 静态变量(S…

Python 数据结构与实践深度剖析

Python 数据结构与实践深度剖析 本文旨在深入剖析 Python 数据结构及其在实际编程中的应用。通过详细的理论阐述、丰富的代码示例以及直观的图表,帮助读者全面掌握 Python 数据结构的核心概念与操作技巧,助力读者在编程实践中灵活运用数据结构解决各类问…

孜然单授权系统V2.0PHP授权系统

孜然单授权V1.0系统,延续了2022年开发的孜然多应用授权系统V2.0 变更:多应用变单系统,去除没用的垃圾代码,从0开发,去除了一些没用的功能 完善了开发文档,之前那套是我写着玩的屎山代码,V1.0将展…

Kafka客户端连接服务端异常 Can‘t resolve address: VM-12-16-centos:9092

前置条件: 已在CentOs上搭建好kafka节点服务器,已启动kafka服务已在Springboot项目中引入kafka客户端配置,kafka.bootstrap-serverip:port,并启动客户端服务 异常过程: 在客户端Springboot服务启动过程,控…

Tio-Boot 集成 Spring Boot 实现即时通讯功能全解析

Tio-Boot 集成 Spring Boot 实现即时通讯功能全解析(详细版) 一、Tio-Boot 简介 Tio-Boot 是基于 Tio 框架的 Spring Boot Starter 扩展,提供高性能、低延迟的网络通信能力,支持 TCP/UDP 协议及 WebSocket 协议,适用…

devops 工具 网络安全

🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 DevOps 是一个结合开发(Development)和运维(Operations)的软件开发方法,目的是缩短软件系统的开发周期…