栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

CAN数据处理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CAN数据处理

把上次代码优化一下,直接读取CSV文件的某列数据进行处理。

先把CSV文件用notepad++打开,并且转化为UTF-8编码格式进行存储,

with open(FeilName,'rt', errors='ignore') as csvfile:

在这个函数中添加errors = 'ignore',这是因为文件包含中文字符集,有些字符UTF-8,或者GBK打不开就会报错。添加errors参数忽略错误。

import  numpy as np
import pandas as pd
import csv

FeilName = "2022-6-8-pm1549Stop.csv"

#读取CSV文件,并且将所需要处理的一整列存储在column列表中
#最主要改变是添加errors参数
with open(FeilName,'rt', errors='ignore') as csvfile:
    reader = csv.reader(csvfile)
    column = [row[9] for row in reader]

print (column[2])#这个输出用来检测自己能否正常读取所需要的列

i = 1#读取列表时从下标1开始,(下标0是Header,如果有的话)
j = len(column)-1#获取列表长度

Roll_Data_lists = []#横滚角数据存储列表
Pitch_Data_lists = []#俯仰角数据存储列表

#列表中的数据形式是字符串数字,需要把列表中字符串转化为单个字符数字,存储到Datas_char中,再使用map函数将其转化为整型数字
while i <= j:
    #str1 = "x| 00 00 13 00 00 04 00 00 "#原始字符串数据#这个用来测试整型数字的转化
    Datas = list(column[i])#将字符串转换为单个字符列表
    Datas_Char = []#单个字符存储列表


    #将Datas列表中的无用字符剔除后存储在Datas_Char中
    for data in Datas:
        if ('0'<= data <='9'):
            Datas_Char.append(data)

    #将字符串列表转换为整数列表
    Datas_Int = list(map(int, Datas_Char))

    #读取俯仰角各个位数据
    Sing_Figure_Pitch         = Datas_Int[0]#符号位正负号
    Bai_Figure_Pitch          = Datas_Int[1]#百位
    Shi_Figure_Pitch          = Datas_Int[2]#十位
    Ge_Figure_Pitch           = Datas_Int[3]#个位
    Point_One_Figure_Pitch    = Datas_Int[4]#小数点后一位
    Point_Two_Figure_Pitch    = Datas_Int[5]#小数点后二位
    #合并计算俯仰角大小储存在Pitch_Data中。Sing_Figure_Pitch为0,角度为正,为1,角度为负
    if Sing_Figure_Pitch:
        Pitch_Data = (Bai_Figure_Pitch*100 + Shi_Figure_Pitch*10 + Ge_Figure_Pitch + Point_One_Figure_Pitch*0.1 + Point_Two_Figure_Pitch*0.01)*(-1)
    else:
        Pitch_Data = (Bai_Figure_Pitch * 100 + Shi_Figure_Pitch * 10 + Ge_Figure_Pitch + Point_One_Figure_Pitch * 0.1 + Point_Two_Figure_Pitch * 0.01)
    Pitch_Data = round(Pitch_Data, 2)#数据精确到小数点后两位
    #print(Pitch_Data)#这个用来测试所需数据是否成功转化为整型并读取
    Pitch_Data_lists.append(Pitch_Data)#俯仰角存储到列表中

    #读取横滚角各个位数据
    Sing_Figure_Roll         = Datas_Int[6]#符号位
    Bai_Figure_Roll          = Datas_Int[7]#百位
    Shi_Figure_Roll          = Datas_Int[8]#十位
    Ge_Figure_Roll           = Datas_Int[9]#个位
    Point_One_Figure_Roll    = Datas_Int[10]#小数点后一位
    Point_Two_Figure_Roll    = Datas_Int[11]#小数点后二位
    #合并计算横滚角大小储存在Roll_Data中。Sing_Figure_Roll为0,角度为正;为1,角度为负
    if Sing_Figure_Roll:
        Roll_Data = (Bai_Figure_Roll*100 + Shi_Figure_Roll*10 + Ge_Figure_Roll + Point_One_Figure_Roll*0.1 + Point_Two_Figure_Roll*0.01)*(-1)
    else:
        Roll_Data = (Bai_Figure_Roll*100 + Shi_Figure_Roll*10 + Ge_Figure_Roll + Point_One_Figure_Roll*0.1 + Point_Two_Figure_Roll*0.01)
    Roll_Data = round(Roll_Data, 2)
    #print(Roll_Data)#这个用来测试所需数据是否成功转化为整型并读取
    Roll_Data_lists.append(Roll_Data)
    i = i + 1

#这两个输出函数用来测试整型数字列表能否成功读取
#print(Pitch_Data_lists)
#print(Roll_Data_lists)


#将横滚角,俯仰角两列数据加到原来的CSV文件中

ngData = pd.read_csv(FeilName)#读取CSV文件
ngData["Pitch"] = Pitch_Data_lists
ngData["Roll"] = Roll_Data_lists

ngData.to_csv(FeilName,index=False)#默认没有索引

After:

序号,系统时间,时间标识,CAN通道,传输方向,ID号,帧类型,帧格式,长度,数据,Pitch,Roll
675942,15:16:46.131,0x10B437A,ch1,接收,0x0588,数据帧,标准帧,0x08,x| 00 00 13 00 00 04 00 00 ,0.13,0.04
675943,15:16:46.131,0x10B438B,ch1,接收,0x0587,数据帧,标准帧,0x08,x| 00 03 62 10 01 28 00 00 ,3.62,-1.28
675944,15:16:46.131,0x10B4397,ch1,接收,0x0586,数据帧,标准帧,0x08,x| 00 04 25 00 00 63 00 00 ,4.25,0.63
675945,15:16:46.131,0x10B43A6,ch1,接收,0x0585,数据帧,标准帧,0x08,x| 00 04 76 00 00 44 00 00 ,4.76,0.44
675946,15:16:46.131,0x10B43DE,ch1,接收,0x0588,数据帧,标准帧,0x08,x| 00 00 13 00 00 04 00 00 ,0.13,0.04
675947,15:16:46.131,0x10B43EF,ch1,接收,0x0587,数据帧,标准帧,0x08,x| 00 03 62 10 01 28 00 00 ,3.62,-1.28
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/977339.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号