python 中的 mf4 到 csv 转换

mf4 to csv conversion in python

我有一个 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'

请多多指教。谢谢!

您已经有 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 来做这个。您可以参考下面link了解更多详情。

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 

lib mdfreader。在你要安装它。

conda install mdfreader

您可以使用 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()

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

CANedge 支持最新的 MF4 文件格式 - 下面我们列出了优点、基础知识和 software/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,或同时支持 raw/physical 数据。

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