【问题标题】:Searching and comparing data from two different csv files搜索和比较来自两个不同 csv 文件的数据
【发布时间】:2019-06-18 19:50:01
【问题描述】:

首先,请记住,我是 Python 的初学者。我整个下午都在试图解决这个问题,但没有运气。

这就是我想要做的:

假设我们有两个 csv 文件:

文件 1:

col1;col2
659039;16,9
659038;27,8
659037:36,4

文件 2:

col1;col2
659037:36,4
659039;16,9
659038;30

我想在文件 2 的 col1 中搜索文件 1 的 col1 中的所有项目,如果找到并且 col2 存在差异,则返回该行。在上述情况下,只会返回文件 2 的最后一行,因为其他行是相同的(行号无关紧要)。我只想要与众不同的人。

解释得不好。希望你明白我的意思。任何帮助将不胜感激!

【问题讨论】:

  • 将输入与逻辑分开。这意味着:读取 csv 文件并将其放入内存中的正确数据结构中。然后比较这两种数据结构。

标签: python csv


【解决方案1】:

尝试一次做一件事。首先,从 file1 中提取检查 file2 所需的所有值,并将它们存储在易于使用的数据结构中。在下面的示例中,我遍历了 file1 中的所有行并将内容收集到字典中。具体来说,键来自第一列,值来自第二列。

现在,您可以遍历 file2 中的每一行,并尝试查找第一列中的内容不作为字典中的键存在的任何行。如果键确实存在,请确保其值不存在匹配第二列。只有同时满足这两个条件时,您才应该返回该行。

import csv

fileItems = {}
linesToReturn = []

with open('file1.csv', newline='', encoding='utf-8-sig') as file1:
    reader = csv.reader(file1, True)
    for row in reader:
        fileItems[row[0]] = row[1]

with open('file2.csv', newline='', encoding='utf-8-sig') as file2:
    reader = csv.reader(file2, True)
    for row in reader:
        if fileItems.get(row[0]) != row[1]:
            linesToReturn.append(row)

print(linesToReturn)

如果您使用 csv 搜索文件,请查看文档 here.

【讨论】:

    【解决方案2】:

    将您的问题分解为子问题。您可以通过以下步骤使用 Pandas 框架来实现这一点-

    1. 读取 csv 文件。
    2. 使用 pandas 框架来比较两列。你可以参考-https://www.shanelynn.ie/python-pandas-read_csv-load-data-from-csv-files/
    3. 如果您找到所需的差异,请将该行添加到 python 列表中
    4. 返回代码末尾的列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      相关资源
      最近更新 更多