Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python解析两个文件_Python_Csv_Compare - Fatal编程技术网

用Python解析两个文件

用Python解析两个文件,python,csv,compare,Python,Csv,Compare,我对python还是新手,无法实现我想要的东西。我正在使用Python 3.7.0 我有一个名为log.csv的文件,其中包含CANbus消息的日志 当列标签ID中的ID为348时,我想检查列标签Data2和Data3的内容 如果它们都不同于“00”,我想用“Data3+Data2”创建一个名为fault_code的新字符串 然后,我想检查另一个CSV文件,其中显示此代码字符串,并打印此行的第6列(标签说明)。但最后一部分我只想对每个错误代码执行一次 这是我的密码: import csv CA

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

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

当列标签ID中的ID为348时,我想检查列标签Data2和Data3的内容

如果它们都不同于“00”,我想用“Data3+Data2”创建一个名为fault_code的新字符串

然后,我想检查另一个CSV文件,其中显示此代码字符串,并打印此行的第6列(标签说明)。但最后一部分我只想对每个错误代码执行一次

这是我的密码:

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]}")
这是log.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
这是faultcode.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可以有100000多行,因此使用它可能是一个更好的主意。你觉得怎么样


谢谢你的帮助

缩进时要小心,因为有时会使用空格和其他选项卡缩进,所以会出现此错误

正如PM 2Ring所说,每次阅读一行日志时都阅读“Fault_codes.csv”是非常没有效率的

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


您不需要在RAM中存储所有log.csv行。所以我会用csv模块一行一行地读,做我的工作,写一个新文件,然后读下一行。无需在此处使用pandas,因为它将免费填充RAM。

您可以用块嵌套
。但是,在Python3中,indentation.BTW中不能混合制表符和空格,在循环中反复打开同一个文件(如'Fault_codes.csv')不是很有效。最好在循环之外打开它,或者将整个内容读入内存,或者使用
.seek
方法“倒带”它(如果您确实需要多次阅读)。简单的谷歌搜索给了我这个。不一致之处在于空格和制表符的使用。好的可能重复我只使用制表符解决了缩进问题,并在编辑器上设置了正确的制表长度。谢谢你指出这一点。好的!我将检查pandas如何使用DataFrame,然后与循环中的其他文件进行比较。