首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
用 Python 一键把 ASC 文件转成 BLF(基于 python-can)
📅 2026/10/11 6:25:45
✍️ 爱科研究院
👁 阅读 3,247
用 Python 一键把 ASC 文件转成 BLF基于 python-can做车载/嵌入式 CAN 总线开发时Vector 的 CANoe/CANalyzer/ canoe log 常用两种格式ASC文本格式人能看懂但体积大、加载慢和BLF二进制格式体积小、加载快CANoe 打开体验更好。本文分享一个不到 110 行的 Python 小工具支持单个文件转换和整个目录批量转换。一、为什么要转 BLF对比项ASCBLF类型纯文本二进制体积大通常是 BLF 的 5~10 倍小CANoe 加载速度慢大文件要等很久快可读性记事本直接能看需要工具通用性几乎所有工具支持Vector 系工具、python-can 支持结论日常抓包、调试时 ASC 够用但如果要长期归档、发给同事分析、或者在CANoe 里打开几个 G 的日志转成 BLF 体验会好很多。二、环境准备只需要一个依赖python-can。pipinstallpython-canpython-can 内置了ASCReader和BLFWriter两个类读写逻辑它都帮我们做好了我们要做的只是读出来再写进去。三、完整代码保存为asc_to_blf.py#!/usr/bin/env python ASC to BLF converter using python-can library. 用法: python asc_to_blf.py # 转换当前目录下所有 .asc 文件 python asc_to_blf.py input.asc # 转换单个 .asc 文件 python asc_to_blf.py input.asc output.blf # 指定输出文件名 依赖安装: pip install python-can importsysimportosimportglobfrompathlibimportPathdefconvert_asc_to_blf(asc_path,blf_path):将单个 ASC 文件转换为 BLF 文件importcanprint(f正在读取:{asc_path})msgs[]withcan.ASCReader(asc_path)asreader:formsginreader:msgs.append(msg)ifnotmsgs:print(f警告:{asc_path}中未找到任何 CAN 消息跳过。)returnFalseprint(f正在写入{len(msgs)}条消息到:{blf_path})withcan.BLFWriter(blf_path)aswriter:formsginmsgs:writer.on_message_received(msg)print(f转换完成:{asc_path}-{blf_path})returnTruedefconvert_all_asc_in_directory(directory):批量转换目录下所有 .asc 文件asc_filesglob.glob(os.path.join(directory,*.asc))asc_files.extend(glob.glob(os.path.join(directory,*.ASC)))# 支持大写扩展名asc_fileslist(set(asc_files))# 去重ifnotasc_files:print(f在目录{directory}中未找到任何 .asc 文件)return0,0print(f找到{len(asc_files)}个 ASC 文件)print(-*50)success_count0fail_count0forasc_pathinasc_files:blf_pathos.path.splitext(asc_path)[0].blftry:ifconvert_asc_to_blf(asc_path,blf_path):success_count1else:fail_count1exceptExceptionase:print(f转换失败:{asc_path}-{e})fail_count1print(-*50)print(f批量转换完成: 成功{success_count}个, 失败{fail_count}个)returnsuccess_count,fail_countif__name____main__:try:importcanexceptImportError:print(错误: 未安装 python-can。请执行: pip install python-can)sys.exit(1)# 获取当前脚本所在目录script_diros.path.dirname(os.path.abspath(__file__))iflen(sys.argv)2:# 命令行参数模式支持单文件或指定目录input_pathsys.argv[1]ifos.path.isdir(input_path):# 指定了目录success,failconvert_all_asc_in_directory(input_path)sys.exit(0iffail0else1)elifos.path.isfile(input_path):# 指定了单个文件iflen(sys.argv)3:blf_pathsys.argv[2]else:blf_pathos.path.splitext(input_path)[0].blftry:ifconvert_asc_to_blf(input_path,blf_path):sys.exit(0)else:sys.exit(1)exceptExceptionase:print(f错误:{e})sys.exit(1)else:print(f错误: 路径不存在 -{input_path})sys.exit(1)else:# 无参数转换当前脚本所在目录下所有 .asc 文件success,failconvert_all_asc_in_directory(script_dir)sys.exit(0iffail0else1)四、使用方法脚本支持三种调用方式# 1. 不带参数批量转换脚本所在目录下的所有 .asc 文件python asc_to_blf.py# 2. 指定单个文件输出同名 .blfpython asc_to_blf.py demo.asc# 3. 指定输入输出文件名python asc_to_blf.py demo.asc output.blf# 4. 传入目录批量转换该目录下所有 .ascpython asc_to_blf.py D:\can_logs运行效果找到 3 个 ASC 文件 -------------------------------------------------- 正在读取: D:\can_logs\run1.asc 正在写入 128456 条消息到: D:\can_logs\run1.blf 转换完成: D:\can_logs\run1.asc - D:\can_logs\run1.blf 正在读取: D:\can_logs\run2.asc 正在写入 98233 条消息到: D:\can_logs\run2.blf 转换完成: D:\can_logs\run2.asc - D:\can_logs\run2.blf -------------------------------------------------- 批量转换完成: 成功 3 个, 失败 0 个五、几个实现细节1. 为什么要先import can再检查try:importcanexceptImportError:print(错误: 未安装 python-can。请执行: pip install python-can)sys.exit(1)放在__main__入口处做一次前置体检比让用户看到一堆红色ModuleNotFoundError友好得多。2. 先全部读入再写入代码里先把消息存进msgs列表再统一写 BLF好处是可以先判断文件是否为空ifnotmsgs:print(f警告:{asc_path}中未找到任何 CAN 消息跳过。)returnFalse避免出现生成了一个 0 字节的 BLF这种尴尬情况。⚠️ 小提示这种写法会把所有消息驻留在内存里。如果是几个 G 的超大 ASC 文件建议改成边读边写的流式方式去掉msgs列表直接在循环里writer.on_message_received(msg)。3. 兼容大写扩展名asc_filesglob.glob(os.path.join(directory,*.asc))asc_files.extend(glob.glob(os.path.join(directory,*.ASC)))asc_fileslist(set(asc_files))# 去重在Windows上glob是大小写不敏感的所以set()去重很关键否则同一个文件会被处理两遍Linux 上则能同时匹配到两种后缀。4. 退出码脚本用sys.exit(0/1)返回退出码方便在CI、批处理脚本里判断执行结果python asc_to_blf.py D:\can_logsif%errorlevel% neq0(echo转换失败请检查日志)六、小结核心就两步can.ASCReader读 →can.BLFWriter写支持单文件 / 目录批量两种模式覆盖日常绝大多数场景代码短、零配置丢到日志目录里双击运行就能用。相关文章推荐python-can 官方文档https://python-can.readthedocs.io/BLF 格式说明Vector Binary Logging Format
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/11 6:25:45
3 款手机音频剪辑 APP 横评,短视频配音后期,免费工具怎么选?
2026/10/11 6:25:44
【零基础学智能仿真-47】Abaqus参数化批处理:从单个模型到可追溯的仿真数据集
2026/10/11 6:20:44
操作系统级验证能力下沉:从内核KCSAN到eBPF自定义规则
2026/10/11 7:15:49
STM32输出比较与输入捕获配置详解
2026/10/11 7:15:49
01序列间隔检查:一次遍历解决力扣1437边界问题
2026/10/11 7:15:49
代码智能体从零上手:实操配置与开发效率提升指南
2026/10/11 7:15:49
工程视角下的Transformer:训练策略、推理优化与全流程避坑指南
2026/10/11 7:15:49
Python实战:从零构建在线电影推荐系统,协同过滤与Flask接口全解析
2026/10/11 7:10:49
AI Agent 可观测性实践:用 OpenTelemetry 让决策路径可追踪
2026/10/11 0:00:10
流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南
2026/10/11 0:00:10
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别
2026/10/11 0:00:10
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容
2026/10/11 0:00:10
流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南
2026/10/11 0:00:10
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别
2026/10/11 0:00:10
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容
2026/10/10 3:41:56
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/10 3:41:54
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/9 11:36:17
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)