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 版权协议,转载请附上原文出处链接和本声明。