使用 Python 解析两个文件



我仍然是python的新手,无法实现我想要的东西。我正在使用Python 3.7.0

我有一个名为log.csv的文件,其中包含CANbus消息的日志。

我想检查列标签 ID 中的 ID 为 348 时列标签 Data2 和 Data3 的内容是什么。

如果它们都与"00"不同,我想用"Data3+Data2"制作一个名为 fault_code 的新字符串。

然后我想检查出现此代码字符串的另一个 CSV 文件,并打印此行的第 6 列(标签描述(。但是最后一部分我只想每fault_code做一次。

这是我的代码:

import csv
CAN_ID = "348"
with open('0.csv') as log:
reader = csv.reader(log,delimiter=',')
for log_row in reader:
if log_row[1] == CAN_ID:
if (log_row[5]+log_row[4]) != "0000":
fault_code = log_row[5]+log_row[4]
with open('Fault_codes.csv') as fault:
readerFC = csv.reader(fault,delimiter=';')
for fault_row in readerFC:
if "0x"+fault_code in readerFC:
print("{fault_row[6]}")

这是日志.csv文件的一部分

Timestamp,ID,Data0,Data1,Data2,Data3,Data4,Data5,Data6,Data7,                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
396774,313,0F,00,28,0A,00,00,C2,FF
396774,314,00,00,06,02,10,00,D8,00
396775,**348**,2C,00,**00,00**,FF,7F,E6,02

这是错误代码的一部分.csv

Level;LED Flashes;UID;FID;Type;Display;Message;Description;RecommendedAction 
1;2;1;**0x4481**;Warning;F12001;Handbrake Fault;Handbrake is active;Release handbrake 
1;5;1;**0x4541**;Warning;F15001;Fan Fault;blablabla;blablalba 
1;5;2;**0x4542**;Warning;F15002;blablabla

另外,您是否想到了完成此任务的更好方法?我读过熊猫可以很好地处理大文件。作为 log.csv可以有 100'000+ 行,使用它可能是个更好的主意。你觉得怎么样?

感谢您的帮助!

小心缩进,您会收到此错误,因为有时您使用空格和其他制表符进行缩进。

正如PM 2Ring所说,每次读取日志的1行时读取"Fault_codes.csv"确实效率不高。

您应该读取一次错误代码并将内容存储在 RAM 中(如果适合(。您可以使用熊猫来执行此操作,并将内容存储到数据帧中。我会在阅读您的日志之前这样做。

您无需将所有日志.csv行存储在RAM中。所以我会继续用csv模块逐行阅读它,做我的东西,写入一个新文件,然后阅读下一行。无需在此处使用熊猫,因为它会免费填满您的 RAM。

相关内容

  • 没有找到相关文章