How to Convert .blf (CAN) to .csv in Python

Problem Formulation

πŸ’¬ How to convert .blf from a CAN bus to .csv in Python?

πŸ’‘ What is BLF? The Binary Logging Format (BLF) is a proprietary
CAN log format from the automative company Vector Informatik GmbH.

πŸ’‘ What is CAN? The Controller Area Network (CAN bus) is a message-based protocol standard for microcontrollers in vehicles to communicate without a host computer.

Method 1: Using BLF Reader and CSV Writer

To convert the BLF file 'my_file.blf' to the CSV file 'my_file.csv', you can first iterate over the bus messages using can.BLFReader('my_file.csv') and add the data to a list of lists. Then, you can use the csv.writer() approach to write the list of lists to a CSV file.

Here’s an example that improves upon this SO thread:

import can
import csv


log = []

for msg in list(can.BLFReader("my_file.blf")):
    msg = str(msg)
    row = [msg[18:26], msg[38:40], msg[40:42], 
           msg[46], msg[62], msg[67:90]]
    log.append(row)

with open("my_file.csv", "w", newline='') as f:
    writer = csv.writer(f, delimiter=',', quotechar='\"', 
                        quoting=csv.QUOTE_ALL)
    writer.writerows(log)

A more sophisticated version of this code is provided in this Github repository. Here’s a screenshot of the code — notice the more advanced processing of a single message compared to our solution:

Method 2: Using the candas Library

The candas library provides utility functions to work with .blf files and the CAN bus. Among other things, it helps you with the conversion from BLF to CSV as outlined here.

This is the provided example:

import candas as cd


db = cd.load_dbc("dbc_folder")

# This is the BLF file 'my_file.blf':
log = cd.from_file("my_file")

# This prints a signal from the messages in the BLF:
print(log["AVGcellTemperature"])

Method 3: Using Custom Solution from python-can Library

You can use your tailor-made solutions by combining the Readers and Writers provided in the python-can library.

It provides multiple utility functions such as:

  • Listener
  • BufferedReader
  • RedirectReader
  • Logger
  • Printer
  • CSVWriter
  • SqliteWriter
  • ASC
  • Log
  • BLF

Chances are you’ll find what you’re looking for when going over those functions!

Related Video

Still not satisfied? I found the following relevant video when searching for a solution to this problem. I think you’ll find some nice tricks in the video!