Python比较两个CSV文件逐行

2024-10-02 00:31:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在有一个脚本版本,它通过将两个csv文件逐个读取到一个列表/集合中来比较两个csv文件。 但是,csv目前太大,无法存储,所以我想逐行迭代并打印出不同的行。

我不能做两个csvreaders循环,因为这样内部循环将读取整个文件,而外部循环将在第一行

我宁愿这样做,而不是差异,这样当行不匹配时,我可以打印出额外的信息来找出原因

编辑:到目前为止,我做了这样的事情,但是csv太大了,不能一次加载到列表中

def readFile(filename,columns):
mylist=[]
    with open(filename,'rb') as f:
                reader = csv.reader(f)
                for line in reader:
                    mylist.append(tuple(line[i] for i in columns))
    return mylist

mylist1=readFile(filename1,columns)
mylist2=readFile(filename2,columns)
diff1=diff(mylist1,mylist2)
diff2=diff(mylist2,mylist2)

Tags: columns文件csvin脚本列表forline
3条回答

假设文件的行数相同,并且您只查找行内差异(即,比较第一个文件中的第1行和第二个文件中的第1行,依此类推),这样应该可以工作:

with open(filename1, 'rb') as f1, open(filename2, 'rb') as f2

  rdr1 = CsvReader(f1)
  rdr2 = CsvReader(f2)

  for file1_line in rdr1:

     file2_line = rdr2.next()

     # Perform your comparison between file1_line and file2_line here
     # and print differences, or accumulate only the differences in a 
     # results list.

你可以试试这个密码。提供所有匹配值的集合。

import csv

result_path   = 'result_check.csv'
result_file = open(result_path,'r')
result_reader = csv.reader(result_file)

f1 = {}
for rows in result_reader:
    f1[rows[0]] = rows[1]


forest_path = 'pandababy3.csv'
forest_file = open(forest_path, 'r')
forest_reader = csv.reader(forest_file)

f2 = {}
for rows in forest_reader:
    f2[rows[0]] = rows[1]

x = len(set(f1.items()).intersection(set(f2.items())))

print(x)

编辑: 我正在使用行[1],因为我的文件有列标题。任何使用此代码比较没有列标题的文件的人,请使用行[0]。

我想到了一种逐行读取文件并应用md5sum/SHA1 sum的方法,然后比较这些值。如果空格或任何其他字符不重要,请在应用校验和之前删除它们

相关问题 更多 >

    热门问题