通过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
时间: 2024-10-21 21:43:41