首页 > 代码库 > python拆分CANLog

python拆分CANLog

通过CANOE 导出的log通常有很多个ID的数据,如何才能找到某一个ID下的特殊的信号?利用python可以简单的进行这个步骤,代码如下:

说明:

  最终的效果是将log信息,分不同的ID进行拆分,并单独生成文件log_id.csv的文件夹。

  1. 需要输入输入文件夹

  2. 生成_out文件夹。

  3. 没有错误处理

  4. 采用"[A-F|\d]{3}"匹配CAN ID

 1 #log analy about CAN Signal for CANOE
 2 import os
 3 import re
 4 
 5 ID_Info = {}
 6 fold_in = input("Please input Folder In:")
 7 fold_out = fold_in + "_out"
 8 os.mkdir(fold_out)
 9 rep_id = r"[A-F|\d]{3}"
10 patt_id = re.compile(rep_id)
11 def Info_Report():
12   ‘‘‘
13   CAN Log中的信息有固定的位数。
14     0:时间戳
15     1:1/2
16     2:ID
17     3:Rx/Tx
18     4: d
19     5: data Length
20     6: data length number info
21   ‘‘‘
22   pass
23 
24 def Dev_Folder(folder_in):
25   for fi in os.listdir(folder_in):
26     #打开文件
27     with open(os.path.join(folder_in,fi),"r") as file:
28       #遍历文件行
29       for line in file:
30         #拆分文件,去掉空格,去掉前后逗号
31         a = re.sub(\s+,,,line).strip(",")
32         #判断List是否有3个以上的元素,并且第3个是否为ID.
33         if len(a.split(",")) > 2 and patt_id.match(a.split(",")[2]):
34           if a.split(",")[2] in ID_Info.keys():
35             #如果在字典中,直接将信息写入到该文件中
36             pass
37           else:
38           #新建一个文件,关联字典
39             ID_Info[a.split(",")[2]] = open((os.path.join(fold_out + "\\" + "Log_" + a.split(",")[2]) + ".csv"),"w")
40           ID_Info[a.split(",")[2]].write(a+"\n")
41           #print(a.split(",")[0])
42   for key in ID_Info:
43     ID_Info[key].close()
44 
45 if __name__ == __main__:
46   Dev_Folder(fold_in)
47       

 

python拆分CANLog