用Python把.blf文件解析保存到.csv文件

#以下三个库自行安装
import cantools
import can
import pandas as pd


#根据字段名(信号)解析报文
def parse_signals(msg1537, msg1539, db):
    signal_values = {
        #msg1537中的信号
        "PosLat": None,
        "PosLon": None,
        #msg1539中的信号
        "GroundVel2D": None,
        "VelDown": None,
        "VelEast": None,
        "VelNorth": None
    }

    # 解码报文1537和1539的信号值
    decoded_msg1537 = db.decode_message(msg1537.arbitration_id, msg1537.data)
    decoded_msg1539 = db.decode_message(msg1539.arbitration_id, msg1539.data)
    
    # 将解码的信号值存储到 signal_values 字典中
    for signal in decoded_msg1537:
        if signal in signal_values:
            signal_values[signal] = decoded_msg1537[signal]

    for signal in decoded_msg1539:
        if signal in signal_values:
            signal_values[signal] = decoded_msg1539[signal]

    return signal_values


def turn_to():
    # 加载DBC文件
    dbc_file = r"xxx.dbc"
    db = cantools.db.load_file(dbc_file)
    # 加载blf文件
    f = r"xxx.blf"
    log = can.BLFReader(f)

    msg_ids = [1537, 1539]    #以id为1537, 1539为例
    msg_dict = {msg_id: None for msg_id in msg_ids}

    signal_data = []

    # 遍历CAN日志文件中的每个报文
    for msg in log:
        if msg.is_extended_id:
            msg_id = msg.arbitration_id
        else:
            msg_id = msg.arbitration_id & 0x7FF

        if msg_id in msg_dict:
            msg_dict[msg_id] = msg

            if all(msg is not None for msg in msg_dict.values()):
                signal_values = parse_signals(msg_dict[1537], msg_dict[1539], db)
                signal_data.append(signal_values)
                msg_dict = {msg_id: None for msg_id in msg_ids}

    if signal_data:
        df = pd.DataFrame(signal_data)

        csv_file_path = "xxx.csv"
        try:
            df.to_csv(csv_file_path, index=False)
            print("CSV file saved successfully.")
        except Exception as e:
            print("Error saving CSV file:", str(e))
    else:
        print("No signals found in the message.")

    print("Turn Over!!!")


if __name__ == '__main__':
    turn_to()

解析后如图:

 

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 可以使用pandas库将.blf文件读入并存为excel文件。首先需要安装pandas库,安装方法为: ``` pip install pandas ``` 然后可以使用以下代码将.blf文件读入并存为excel文件: ``` import pandas as pd df = pd.read_fwf('filename.blf') df.to_excel('filename.xlsx', index=False) ``` 其中,`pd.read_fwf`函数可以将.blf文件读入为pandas的DataFrame格式,`df.to_excel`函数可以将DataFrame存为excel文件。 ### 回答2: 要将.blf文件转换为Excel,可以使用Python中的pandas库来读取和操作数据。 首先,需要安装pandas库,可以使用pip install pandas命令进行安装。 接下来,使用pandas库中的read_csv函数来读取.blf文件。由于.blf文件的格式可能与CSV文件不同,需要指定适当的参数来正确读取文件。比如,可以使用sep参数指定分隔符,header参数指定是否存在头部行等等。 示例代码如下: import pandas as pd # 读取.blf文件 data = pd.read_csv('file.blf', sep=';', header=None) 接下来,可以对data进行一些处理,如选择需要的列、处理缺失值、转换数据类型等等。具体的处理过程根据文件的具体情况而定。 最后,使用pandas库中的to_excel函数将处理后的数据保存为Excel文件。 示例代码如下: # 将数据保存为Excel文件 data.to_excel('output.xlsx', index=False) 这样就可以将.blf文件转换为Excel文件了。请注意,具体的处理步骤需要根据.blf文件的结构和内容进行调整。在处理数据时,也可以借助其他处理数据的库和方法,如numpy、matplotlib等,根据具体的需求进行选择。 ### 回答3: Python可以使用第三方库pandas和biom-format来将.blf文件转换为excel文件。 首先,需要安装pandas和biom-format库。可以使用pip命令进行安装: ``` pip install pandas pip install biom-format ``` 接下来,导入所需的库: ```python import pandas as pd from biom import load_table ``` 然后,使用biom-format库的load_table函数加载.blf文件: ```python table = load_table('input.blf') ``` 接着,可以将表格数据转换为pandas的DataFrame对象: ```python df = pd.DataFrame.from_records(table.iter_data(axis='sample', dense=False), index=table.ids(axis='observation'), columns=table.ids(axis='sample')) ``` 最后,使用pandas的to_excel函数将DataFrame对象保存为excel文件: ```python df.to_excel('output.xlsx') ``` 完整的代码如下: ```python import pandas as pd from biom import load_table table = load_table('input.blf') df = pd.DataFrame.from_records(table.iter_data(axis='sample', dense=False), index=table.ids(axis='observation'), columns=table.ids(axis='sample')) df.to_excel('output.xlsx') ``` 运行该代码将会将.blf文件转换为名为output.xlsx的excel文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值