【问题标题】:Comparing 2 CSV file,In which last line to be skipped in comparing.Any better way to do it?比较 2 个 CSV 文件,比较时要跳过哪一行。有更好的方法吗?
【发布时间】:2013-12-01 15:21:15
【问题描述】:

我有 2 个 csv 文件。我正在使用 csv dict reader

csv1.csv
abc,def,ghi
abc1,def1,ghi1
abc2,def2,ghi2

csv2.csv
abc4,def4,ghi4
abc5,def5,ghi5
abc2,def2,ghi2

在哪个 csv2 文件与 csv1.csv 进行比较。 我必须通过忽略 csv2 的最后一行来比较两个 csv1 文件。 csv dict reader中有什么方法可以忽略最后一行? 或者如果列值与特定值匹配,我可以跳过该行吗?

【问题讨论】:

  • 比较文件是什么意思?
  • 查找行差异

标签: python csv


【解决方案1】:

抱歉,我还是不太明白你所说的比较行和行差异是什么意思。

无论如何,您可以使用类似以下的内容来读取除第二个 csv 文件的最后一行之外的所有内容:

import csv

def csv_reader_ignore_last_row(csv_filename):
    with open(csv_filename,'rb') as f:
        reader = csv.reader(f)
        lastrow = reader.next()
        for row in reader:
            yield lastrow
            lastrow = row

for row in csv_reader_ignore_last_row(filename):
    print ', '.join(row)

您可以随时通过调用reader.next()next(reader) 跳过csv.reader 对象的一行。

【讨论】:

  • Python_Dude:如果您添加一个比较每个文件中的一行的示例,我的答案可以更具体。
【解决方案2】:

一种方法是先知道csv2 中的行数,然后使用itertools.islice 切掉最后一行。

>>> from itertools import islice
>>> import csv
with open('csv2.csv') as f:
    line_count = sum(1 for _ in f)  #get the line count
    f.seek(0)                       #move the file pointer to the start of the file
    f = islice(f, 0, line_count-1)  #skip last line
    reader = csv.reader(f)         
    print list(reader)
...     
[['abc4', 'def4', 'ghi4'], ['abc5', 'def5', 'ghi5']]

【讨论】:

    猜你喜欢
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 2021-02-26
    • 1970-01-01
    相关资源
    最近更新 更多