最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

1. 環(huán)境準備與依賴庫

這段代碼依賴兩個核心庫:

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

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

功能解析

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

(2)時間戳信息提取器

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

核心亮點

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

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

主函數(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)

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

環(huán)境配置

pip install python-can

路徑設(shè)置

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

運行代碼

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

  • 文件名稱時間戳
  • 文件元數(shù)據(jù)開始時間
  • 文件元數(shù)據(jù)結(jié)束時間
  • 首條消息時間戳
  • 末條消息時間戳

數(shù)據(jù)校驗示例

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

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

性能優(yōu)化

對于十萬級文件處理,可改用os.scandir替代os.listdir提升路徑掃描效率,或引入多線程并行解析。

異常處理

增加try-except塊處理損壞的 BLF 文件或格式錯誤的文件名:

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

功能擴展

  • 增加 CAN 消息 ID 統(tǒng)計功能,分析高頻通信節(jié)點
  • 計算消息間隔時間,檢測總線負載峰值
  • 結(jié)合pandas生成可視化時序圖表

五、總結(jié)

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

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

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

相關(guān)文章

  • Python導(dǎo)入oracle數(shù)據(jù)的方法

    Python導(dǎo)入oracle數(shù)據(jù)的方法

    這篇文章主要介紹了Python導(dǎo)入oracle數(shù)據(jù)的方法,涉及Python讀取csv文件信息再插入到Oracle數(shù)據(jù)庫的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • python中dir()與__dict__屬性的區(qū)別淺析

    python中dir()與__dict__屬性的區(qū)別淺析

    這篇文章主要給大家介紹了關(guān)于python中dir()與__dict__屬性的區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Python+OpenCV實現(xiàn)邊緣檢測與角點檢測詳解

    Python+OpenCV實現(xiàn)邊緣檢測與角點檢測詳解

    這篇文章主要為大家詳細介紹了如何通過Python+OpenCV實現(xiàn)邊緣檢測與角點檢測,文中的示例代碼講解詳細,對我們學(xué)習(xí)Python與OpenCV有一定的幫助,需要的可以參考一下
    2023-02-02
  • 一文帶你了解Python枚舉類enum的使用

    一文帶你了解Python枚舉類enum的使用

    枚舉是與多個唯一常量綁定的一組符號,因為枚舉表示的是常量,建議枚舉成員名用大寫 IntEnum 便于進行系統(tǒng)交互。本文將通過一些示例代碼講解Python枚舉類的使用,需要的可以參考一下
    2022-10-10
  • Python實現(xiàn)PNG圖片黑色邊框自動去除工具

    Python實現(xiàn)PNG圖片黑色邊框自動去除工具

    在日常的圖像處理工作中,我們經(jīng)常會遇到需要去除圖片黑色邊框的需求,本文將使用Python實現(xiàn)一個自動化的 PNG 圖片黑色邊框去除工具,需要的可以了解下
    2025-06-06
  • Python線程之多線程展示詳解

    Python線程之多線程展示詳解

    這篇文章主要為大家介紹了Python線程之多線程展示,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Python實現(xiàn)學(xué)生信息管理系統(tǒng)的示例代碼

    Python實現(xiàn)學(xué)生信息管理系統(tǒng)的示例代碼

    夏天是用來告別的季節(jié),因為畢業(yè)總在七月。那么七月之前的季節(jié)是用來干嘛的呢?當(dāng)然是用來做畢業(yè)設(shè)計的啦!本文為大家準備了兩個版本的學(xué)生信息管理系統(tǒng),希望對大家有所幫助
    2023-02-02
  • Python進程間通信 multiProcessing Queue隊列實現(xiàn)詳解

    Python進程間通信 multiProcessing Queue隊列實現(xiàn)詳解

    這篇文章主要介紹了python進程間通信 mulitiProcessing Queue隊列實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Python+django實現(xiàn)文件下載

    Python+django實現(xiàn)文件下載

    本文是python+django系列的第二篇文章,主要是講述是先文件下載的方法和代碼,有需要的小伙伴可以參考下。
    2016-01-01
  • python利用pd.cut()和pd.qcut()對數(shù)據(jù)進行分箱操作

    python利用pd.cut()和pd.qcut()對數(shù)據(jù)進行分箱操作

    本文主要介紹了python利用pd.cut()和pd.qcut()對數(shù)據(jù)進行分箱操作,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06

最新評論

文山县| 桂阳县| 关岭| 广丰县| 武平县| 华宁县| 荣昌县| 恩平市| 满洲里市| 通化县| 呼伦贝尔市| 凌海市| 六盘水市| 封开县| 兰西县| 临颍县| 焉耆| 吉木萨尔县| 石柱| 静海县| 永修县| 扎鲁特旗| 孟津县| 上思县| 天全县| 简阳市| 东辽县| 乌拉特前旗| 万载县| 西丰县| 阿拉善左旗| 诸暨市| 威宁| 浦城县| 隆尧县| 银川市| 甘孜县| 山东| 兴国县| 喀喇沁旗| 滁州市|