CAN总线CSV格式报文转ASC格式报文python实现

  • Post author:
  • Post category:python




CAN总线CSV格式报文转ASC格式报文python实现



代码

import pandas as pd
from tqdm import tqdm
import os
from jinja2 import Template

startime = 0


def GetstartTime(strr: str):
    global startime
    listt = strr.split(":")
    hour = listt[0]
    minn = listt[1]
    startime = float(int(hour) * 3600 + int(minn) * 60) + float(GetTimeStampSecond(strr))


def GetTimeStampInterval(strr: str):
    global startime
    listt = strr.split(":")
    hour = listt[0]
    minn = listt[1]
    thistime = float(int(hour) * 3600 + int(minn) * 60) + float(GetTimeStampSecond(strr))
    interval = thistime - startime
    return round(interval, 3)


def SaveStr2File(filename, contents):
    fh = open(filename, 'w')
    fh.write(contents)
    fh.close()


def GetTimeStampSecond(strr: str):
    strr = strr.split(":")
    s = strr[-1]
    ret = s.split(".0")
    if len(ret) > 2:
        tempret = ret[:-1]
        retstr = ""
        for i in tempret:
            retstr += ".0" + i
        return retstr[2:]
    else:
        return ret[0]


# 读取resource中的csv格式文件
files = [filename.split('.')[0] for filename in os.listdir('./resource/') if filename.endswith('.csv')]

templatestr = '''date Sun Oct 16 09:58:30 PM 2022
base hex timestamps absolute
// version 7.0.0
{%-for i in T%}
{{i}}
{%-endfor%}
'''
f_num = 1
for fname in files:
    print(f'[{f_num}/{len(files)}] Parsing data from file: {fname}')
    csv_reader = pd.read_csv(f'./resource/{fname}.csv', encoding="gbk")
    GetstartTime(csv_reader.时间戳[1])
    liststr = []
    for i in tqdm(range(csv_reader.shape[0])):
        if (i != 0):
            timee = GetTimeStampInterval(csv_reader.时间戳[i])
            idd = csv_reader.ID[i].split("0x")[-1]
            msg_id = int(csv_reader.ID[i], 16)
            if (msg_id > 0x7FFF):
                idd += "x"
            while (idd[0] == "0"):
                idd = idd[1:]
            dataa = csv_reader.数据[i]
            liststr.append(f"{timee} 1 {idd} Rx d 8 {dataa} ")
    template = Template(templatestr)
    SaveStr2File(f'./out/{fname}.asc', template.render(T=liststr))

文件目录结构

CSV2ASC
	├─out
	|	└─zlg.asc
	└─resource
		└─zlg.csv



版权声明:本文为qq_39674745原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。