欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)批量提取BLF文件時(shí)間戳

 更新時(shí)間:2025年07月25日 15:28:14   作者:阿蒙Armon  
BLF(Binary Logging Format)作為 Vector 公司推出的 CAN 總線(xiàn)數(shù)據(jù)記錄格式,被廣泛用于存儲(chǔ)車(chē)輛通信數(shù)據(jù),本文將使用Python輕松提取關(guān)鍵時(shí)間戳信息,希望對(duì)大家有所幫助

在汽車(chē)測(cè)試、嵌入式系統(tǒng)開(kāi)發(fā)等領(lǐng)域,CAN 總線(xiàn)數(shù)據(jù)的分析是一項(xiàng)基礎(chǔ)且關(guān)鍵的工作。而 BLF(Binary Logging Format)作為 Vector 公司推出的 CAN 總線(xiàn)數(shù)據(jù)記錄格式,被廣泛用于存儲(chǔ)車(chē)輛通信數(shù)據(jù)。本文將通過(guò)一段實(shí)用的 Python 代碼,帶你掌握批量處理 BLF 文件的技巧,輕松提取關(guān)鍵時(shí)間戳信息并生成結(jié)構(gòu)化數(shù)據(jù)報(bào)告。

一、為什么需要批量處理 BLF 文件

在汽車(chē)測(cè)試場(chǎng)景中,一臺(tái)測(cè)試設(shè)備可能在單次實(shí)驗(yàn)中生成成百上千個(gè) BLF 文件,每個(gè)文件包含數(shù)萬(wàn)條 CAN 消息。手動(dòng)分析這些文件不僅效率低下,還容易出錯(cuò)。通過(guò)編程批量處理,我們可以:

  • 快速提取文件創(chuàng)建時(shí)間、消息起止時(shí)間等關(guān)鍵時(shí)序信息
  • 生成標(biāo)準(zhǔn)化的 CSV 報(bào)告,便于后續(xù)數(shù)據(jù)分析
  • 自動(dòng)化校驗(yàn)數(shù)據(jù)完整性(如消息時(shí)間連續(xù)性)
  • 為大數(shù)據(jù)分析或 AI 模型訓(xùn)練提供結(jié)構(gòu)化輸入

二、核心代碼解析:從文件遍歷到數(shù)據(jù)導(dǎo)出

1. 環(huán)境準(zhǔn)備與依賴(lài)庫(kù)

這段代碼依賴(lài)兩個(gè)核心庫(kù):

  • python-can:用于解析 BLF 文件的專(zhuān)業(yè)庫(kù),需通過(guò)pip install python-can安裝
  • 標(biāo)準(zhǔn)庫(kù):os(路徑處理)、csv(數(shù)據(jù)導(dǎo)出)、datetime(時(shí)間處理)

2. 核心功能模塊詳解

(1)BLF 文件路徑掃描器

def get_blf_files(dataset_path: str):
   blf_files = []
   for d in os.listdir(dataset_path):
       can_path = os.path.join(dataset_path, d, 'canbus')

       if not os.path.exists(can_path):
           continue

       for v in os.listdir(can_path):
           if not v.endswith(blf_extension):
               continue

           blf_path = os.path.join(can_path, v)
           blf_files.append(blf_path)

   return blf_files

功能解析

  • 遍歷目標(biāo)目錄下的canbus子文件夾(汽車(chē)數(shù)據(jù)常見(jiàn)存儲(chǔ)結(jié)構(gòu))
  • 篩選出所有.blf后綴的文件
  • 返回完整文件路徑列表,為后續(xù)解析做準(zhǔn)備

(2)時(shí)間戳信息提取器

def get_blf_info(blf_path: str):
   file_name = os.path.basename(blf_path).replace('.blf', '')
   start_time = datetime.strptime(file_name, '%Y%m%d%H%M%S')
   file_timestamp = start_time.timestamp()

   with can.BLFReader(blf_path) as reader:
       start_timestamp = reader.start_timestamp
       stop_timestamp = reader.stop_timestamp

       messages = [msg for msg in reader]
       first_message_timestamp = messages[0].timestamp
       last_message_timestamp = messages[-1].timestamp

       return file_timestamp, start_timestamp, stop_timestamp, first_message_timestamp, last_message_timestamp

核心亮點(diǎn)

  • 從文件名提取創(chuàng)建時(shí)間(假設(shè)文件名格式為%Y%m%d%H%M%S
  • 通過(guò)can.BLFReader讀取 BLF 文件元數(shù)據(jù)(start_timestamp/stop_timestamp
  • 提取首條和末條 CAN 消息的時(shí)間戳,用于分析數(shù)據(jù)覆蓋范圍
  • 返回五種關(guān)鍵時(shí)間戳,構(gòu)建完整的時(shí)序鏈條

(3)數(shù)據(jù)導(dǎo)出與主流程控制

主函數(shù)實(shí)現(xiàn)了 “掃描 - 解析 - 導(dǎo)出” 的全流程:

root_path = r"can/path"

files = get_blf_files(root_path)

with open(f'{output_file_name}.csv', mode='w') as csv_f:
   writer = csv.writer(csv_f)
   for f in files:
       timestamps = get_blf_info(f)
       writer.writerow(timestamps)

三、實(shí)戰(zhàn)應(yīng)用:如何使用這段代碼

環(huán)境配置

pip install python-can

路徑設(shè)置

修改root_path為你的 BLF 文件根目錄(支持嵌套的canbus子文件夾)

運(yùn)行代碼

執(zhí)行后會(huì)在當(dāng)前目錄生成以根目錄名為文件名的 CSV 文件,包含五列時(shí)間戳數(shù)據(jù):

  • 文件名稱(chēng)時(shí)間戳
  • 文件元數(shù)據(jù)開(kāi)始時(shí)間
  • 文件元數(shù)據(jù)結(jié)束時(shí)間
  • 首條消息時(shí)間戳
  • 末條消息時(shí)間戳

數(shù)據(jù)校驗(yàn)示例

通過(guò)對(duì)比first_message_timestampfile_timestamp,可快速檢查文件命名是否與實(shí)際消息時(shí)間一致,排查數(shù)據(jù)錯(cuò)位問(wèn)題。

四、優(yōu)化建議與擴(kuò)展方向

性能優(yōu)化

對(duì)于十萬(wàn)級(jí)文件處理,可改用os.scandir替代os.listdir提升路徑掃描效率,或引入多線(xiàn)程并行解析。

異常處理

增加try-except塊處理?yè)p壞的 BLF 文件或格式錯(cuò)誤的文件名:

try:
    start_time = datetime.strptime(file_name, '%Y%m%d%H%M%S')
except ValueError:
    print(f"無(wú)效文件名格式:{file_name}")
continue

功能擴(kuò)展

  • 增加 CAN 消息 ID 統(tǒng)計(jì)功能,分析高頻通信節(jié)點(diǎn)
  • 計(jì)算消息間隔時(shí)間,檢測(cè)總線(xiàn)負(fù)載峰值
  • 結(jié)合pandas生成可視化時(shí)序圖表

五、總結(jié)

這段代碼為 CAN 總線(xiàn)數(shù)據(jù)處理提供了基礎(chǔ)但實(shí)用的工具鏈,特別適合汽車(chē)測(cè)試工程師、嵌入式開(kāi)發(fā)者快速完成 BLF 文件的批量解析工作。通過(guò)將非結(jié)構(gòu)化的二進(jìn)制數(shù)據(jù)轉(zhuǎn)化為結(jié)構(gòu)化的 CSV 表格,為后續(xù)的數(shù)據(jù)分析、可視化和建模鋪平了道路。

如果你在使用中需要處理其他格式的 CAN 數(shù)據(jù)(如.asc.log),可以嘗試基于python-can庫(kù)的其他 Reader 類(lèi)進(jìn)行擴(kuò)展,原理與本文的 BLF 處理邏輯相似。掌握這種批量處理思維,能讓你在面對(duì)海量工業(yè)數(shù)據(jù)時(shí)更游刃有余。

到此這篇關(guān)于Python實(shí)現(xiàn)批量提取BLF文件時(shí)間戳的文章就介紹到這了,更多相關(guān)Python提取BLF文件時(shí)間戳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論