You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python过滤CAN总线报文 按标识符筛选的实现方法咨询

CAN总线日志按标识符过滤实现方案

你原有代码存在几个可优化的点:

  • 每次循环重复打开文件未关闭,长期运行会导致文件句柄泄漏
  • 每次全量读取整个文件,日志文件体积变大后性能会越来越差
  • 仅打印倒数第二行,容易漏过多行同时写入的新日志,也没有过滤逻辑

最终实现代码

# 可直接修改下方参数适配需求
LOG_FILE = "test.txt"
TARGET_ID = "0000155"  # 要过滤的目标报文标识符

def follow_log(file_path):
    # 用with语句自动管理文件开闭,避免句柄泄漏
    with open(file_path, 'r') as f:
        # 若需要启动时先过滤所有历史日志,删除下一行f.seek代码即可
        f.seek(0, 2) # 直接跳到文件末尾,仅处理程序启动后新写入的日志
        while True:
            line = f.readline()
            if not line:
                # 无新内容时短暂休眠,降低CPU占用
                import time
                time.sleep(0.1)
                continue
            yield line.strip()

if __name__ == "__main__":
    for line in follow_log(LOG_FILE):
        parts = line.split('|')
        # 跳过格式不符合规则的异常行
        if len(parts) != 3:
            continue
        _, msg_id, _ = parts
        if msg_id == TARGET_ID:
            print(line)

内容的提问来源于stack exchange,提问作者KZwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:27:04