首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >比较2个文件夹中的大型csv文件,并在python中打印完全不同的行号

比较2个文件夹中的大型csv文件,并在python中打印完全不同的行号
EN

Stack Overflow用户
提问于 2018-08-09 01:05:38
回答 1查看 606关注 0票数 1

我必须比较两个不同文件夹中的大型csv文件。这些文件以相同的名称存储在这些文件夹中。比较后,我需要打印的文件名,行号和字段是不同的。如果其中一个csv中缺少任何一行,那么我需要将其与filename、行号一起打印出来。

我有一个代码,它可以只打印不同的字段,但不能打印两个给定文件之间的行号。

代码语言:javascript
复制
import csv
import itertools
f1= open("file1.csv")
f2= open("file2.csv")
csv_f1= csv.reader(f1)
csv_f2= csv.reader(f2)
for row1, row2 in zip(csv_f1,csv_f2):
    if row1 != row2:
        print(set(row1)-set(row2))

请帮助将其扩展到文件夹级别,并打印文件名和行号以及导致差异的字段。我还需要打印缺少行的文件名和行号。

我尝试在csv.reader部件上使用line_num函数,但它返回的是其他结果,而不是行号。任何查找行号和差异的函数都会有很大的帮助。谢谢。

编辑:我按照@Adrian的要求发布了下面的查询和文件

代码语言:javascript
复制
import csv
import itertools
f1= open("D:/Users/KPriya4/Downloads/csv1.csv")
f2= open("D:/Users/KPriya4/Downloads/csv2.csv")
csv_f1= csv.reader(f1)
csv_f2= csv.reader(f2)
line = 0
for row1, row2 in zip(csv_f1,csv_f2):
    if row1 != row2:
        if not row1:
            print("file1.csv: Row " + str(line) + " is empty")
            continue
        if not row2:
            print("file2.csv: Row " + str(line) + " is empty")
            continue
        print(set(row1)-set(row2))
        print(line)
    line += 1

File

File 2 with difference highlighted

file2中缺少名字为'Carlos‘的file1中的第5行。

当我运行代码时,我得到以下输出。

enter image description here

这也有另一行(第6行),没有区别。

请原谅我没有张贴图像,因为这样的asI不允许附加图像,它只是作为链接张贴。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-09 02:16:42

有了你提供的新信息,我才能把这些放在一起。您使用的代码的问题是,由于两个文件的长度不同,当您将它们压缩在一起时,zip的长度将是列表中条目较少的那个,因此您将丢失信息。此外,由于没有空行,您需要迭代其他列表,以检查您正在查找的项是否在不同的位置。因为您的CSV文件包含一个ID字段,所以我假设它是唯一的,所以我遍历了它:

代码语言:javascript
复制
import csv
import itertools
f1= open("file1.csv")
f2= open("file2.csv")
csv_f1= csv.reader(f1)
csv_f2= csv.reader(f2)

csv_f1 = list(csv_f1)
csv_f2 = list(csv_f2)

line1 = 0
line2 = 0
for row1 in range(0,len(csv_f1)):
    found = False
    # This checks if a row with the same ID exists in the other file and compares them if it does
    for row2 in range(0,len(csv_f2)):
        if csv_f1[row1][1] == csv_f2[row2][1]:
            found = True
            if csv_f1[row1] != csv_f2[row2]:
                print("Line " + str(line1) + " from file 1 and line " + str(line2) + " from file 2 have same ID but different data")
                print(set(csv_f1[row1])-set(csv_f2[row2]))
    if not found:
        print("Line " + str(line1) + " from file 1 is not in file 2")
    line2 += 1
    line1 += 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51752079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档