1

我有一个 mf4 数据集,我想在 python 中将其转换为 CSV。我已从 mf4 读取数据并将其转换为 csv(如下所示),但出现错误,因为我是 python 新手,因此无法找到合适的转换方法。

from asammdf import MDF
import pandas as pd

efficient = MDF('./Data.mf4')

df = efficient.to_csv()


df.append(efficient)

mdf.save('output.csv')

我收到此错误:

MdfException: "Data.mf4" is not a valid ASAM MDF file: magic header is b'timestam'

请建议。谢谢!

4

3 回答 3

1

您已经有 mf4 文件。这个文件是从 mdf 文件转换而来的吗?如果和我想的一样,你应该使用 mdf 文件将其转换为 CSV 文件。无论如何,希望你或其他人能想出一个更好的方法。

import mdfreader
import os

extension = [".mdf"]   
for root, dirs, files in os.walk(input_path):
    for file in files:
        ext = os.path.splitext(file)[-1].lower()
        f_name = os.path.splitext(file)[0]
        if ext in extension:
            yop=mdfreader.Mdf(os.path.join(root, file))
            yop=mdfreader.Mdf(os.path.join(root, file), channel_list=['channel1', 'channel2'], convert_after_read=False)
            yop=mdfreader.Mdf(os.path.join(root, file), compression=True)
            yop=mdfreader.Mdf(os.path.join(root, file), no_data_loading=True)
            yop=mdfreader.Mdf(os.path.join(root, file), metadata=0)  
            yop.get_channel_name4('channelName', 'source path or name')
            yop.get_channel('channelName')
            yop.get_channel_data('channelName')
            yop.MDFVersionNumber
            info=mdfreader.MdfInfo()
            info.list_channels('NameOfFile') 
            info.read_info('NameOfFile') 
            yop.info 
            yop.keys()
            yop.masterChannelList
            yop.plot(['channel1',['channel2','channel3']])
            yop.resample(0.1)
            yop.resample(master_channel='master3')
            yop.cut(begin=10, end=15)
            yop.export_to_csv(sampling=0.01)
            yop.export_to_NetCDF()
            yop.export_to_hdf5()
            yop.export_to_matlab()
            yop.export_to_xlsx()
            yop.export_to_parquet()
            yop.return_pandas_dataframe('master_channel_name')
            yop.convert_to_pandas()
            yop.keep_channels({'channel1','channel2','channel3'})
            yop2=mdfreader.Mdf('NameOfFile_2')
            yop.merge_mdf(yop2)
            yop.write('NewNameOfFile')
            yop.write4('NameOfFile', compression=True)
            yop.write3()
            yop.attachments 

我使用 lib mdfreader 来执行此操作。您可以参考下面的链接了解更多详情。

阅读器

感谢您的反馈意见。我明白了你的问题,你可以试试:

pip install https://github.com/danielhrisca/asammdf/archive/development.zip -I --no-deps 

安装开发分支代码,然后

mdf = MDF('file.mf4')
mdf.export('csv', 'export.csv', single_time_base=True, raster=0.1) 

关于您的案例(使用 anaconda)。请试试:

conda install https://github.com/danielhrisca/asammdf/archive/development.zip -I --no-deps 

库 mdfreader。在你想安装它。

conda install mdfreader
于 2020-12-17T01:34:51.557 回答
1

您可以asammdf通过 API 或 GUI 使用该包。

安装包和 GUI 依赖项:

pip install asammdf[gui]

API 使用情况

from asammdf import MDF
mdf = MDF('input.mf4')
mdf.export(fmt='csv', filename='output.csv')

您可以使用其他导出选项,请查看文档https://asammdf.readthedocs.io/en/latest/api.html#asammdf.mdf.MDF.export

图形用户界面

python_installation_folder\Scripts\asammdfgui.exe或 通过运行此脚本启动 GUI

from asammdf.gui.asammdfgui import main
main()

在此处输入图像描述

于 2020-12-18T06:49:22.387 回答
1

ASAM MDF(测量数据格式)是一种二进制文件格式,用于记录例如 CAN、CAN FD 和 LIN 总线数据。如今,MDF 格式已成为行业标准 - 确保了许多 CAN 工具之间的互操作性。

CANedge 支持最新的 MF4 文件格式 - 下面我们列出了优势、基础知识和软件/API 工具。我们还提供样本 MF4 数据(J1939,OBD2)。

from asammdf import MDF, Signal #import asammdf
f_in = input ("Enter Input MDF4 FIle :") 
mdf = MDF(f_in) #read mf4 data
f_out = f_in.replace(".MF4", ".csv")
mdf.export(fmt='csv', filename= f_out) #write to csv

MDF4 文件由“块”组成 - 其中大部分实际上是任意排序的。通过内部“链接”系统,这些块形成层次结构。

与 CSV 相比,这种结构实现了更灵活的日志文件 - 非常适合混合 CAN、CAN FD 和 LIN,或同时支持原始/物理数据。 在此处输入图像描述

来源:https ://www.csselectronics.com/pages/mf4-mdf4-measurement-data-format

于 2022-01-20T05:26:51.513 回答