Python 比较两个 CSV 文件的三种方法并打印出差异

 更新时间:2023年06月08日 09:42:35   作者:迹忆客  
这篇文章主要介绍了Python 比较两个 CSV 文件并打印出差异,本文将讨论比较两个 CSV 文件的各种方法,我们将包括执行此操作的最“Pythonic”方式和可帮助简化此任务的外部 Python 模块,需要的朋友可以参考下

本文将讨论比较两个 CSV 文件的各种方法。 我们将包括执行此操作的最“Pythonic”方式和可帮助简化此任务的外部 Python 模块。

最后,我们将包括一种使用 Pandas DataFrames 识别 CSV 文件差异的方法。

我们假设需要比较的两个 CSV 文件的标题为 file1.csv 和 file2.csv。 您可以根据需要重命名文件。

还请在下面给出的代码片段中适当地替换文件名。

出于示例目的,我们的文件设置如下:

file1.csv:

1,2,3,4,5,6
4,5,6,7,8,9
1,3,4,5,6,1

file2.csv:

1,2,3,4,5,6
4,5,6,7,8,9
2,3,1,4,1,5

方法 1:使用最 Pythonic 的解决方案比较两个 CSV 文件

在这个方法中,我们将文件的内容读入两个列表,遍历其中一个列表并检查每一行是否存在于第二个列表中。 从逻辑上讲,这是一个非常简单的解决方案。

Python 的潜在效率使这种比较相当有效,尽管它看起来像。

with open('file1.csv', 'r') as file1, open('file2.csv', 'r') as file2:
    f1_contents = file1.readlines()
    f2_contents = file2.readlines()
for line in f1_contents:
    if line not in f2_contents:
        print(line)
for line in f2_contents:
    if line not in f1_contents:
        print(line)

上面的代码片段会将不同的行打印到您的终端。

在我们的测试用例中,我们得到以下输出。

1,3,4,5,6,1

2,3,1,4,1,5

方法 2:使用 csv-diff - 外部模块比较两个 CSV 文件

首先,在终端中使用以下命令安装模块。

python3 -m pip install csv-diff

安装后,您无需编写 Python 脚本。 您可以使用以下命令直接在终端中运行它。

csv-diff file1.csv file2.csv --key=id

运行此命令将在您的终端上显示差异。

在我们的测试用例中,我们得到以下输出。

1 row added, 1 row removed

1 row added

1: 2
2: 3
3: 1
4: 4
5: 1
6: 5

1 row removed

1: 1
2: 3
3: 4
4: 5
5: 6
6: 1

要将此模块用作 Python 脚本的一部分,您可以编写类似于以下内容的脚本。

from csv_diff import load_csv, compare
difference = compare(
    load_csv(open("file1.csv")),
    load_csv(open("file2.csv"))
)
print(difference)

输出如下。

{'added': [{'1': '2', '2': '3', '3': '1', '4': '4', '5': '1', '6': '5'}], 'removed': [{'1': '1', '2': '3', '3': '4', '4': '5', '5': '6', '6': '1'}], 'changed': [], 'columns_added': [], 'columns_removed': []}

方法 3:使用 Pandas DataFrames 比较两个 CSV 文件

以下脚本可以为您执行此任务。

import pandas as pd
import sys
import csv
def dataframe_difference(df1: pd.DataFrame, df2: pd.DataFrame, which=None):
    comparison_df = df1.merge(
        df2,
        indicator=True,
        how='outer'
    )
    if which is None:
        diff_df = comparison_df[comparison_df['_merge'] != 'both']
    else:
        diff_df = comparison_df[comparison_df['_merge'] == which]
    return diff_df
if __name__ == "__main__":
    df1 = pd.read_csv("file1.csv", header=None)
    df2 = pd.read_csv("file2.csv", header=None)
    print(dataframe_difference(df1, df2))

请注意,在 read_csv 方法中,参数 header=None 被输入,因为我们的测试文件没有任何标题。 如果您的文件有标题,您可以使用以下方法读取它:pd.read_csv("file1.csv"),其中 file1.csv 将被您的文件替换。

如果您的文件不在与脚本相同的目录中,请提供 CSV 文件的完整路径。

上面的 Python 脚本应该生成如下输出:

0 1 2 3 4 5 _merge
2 1 3 4 5 6 1 left_only
3 2 3 1 4 1 5 right_only

left_only 和 right_only 旁边的行包含所有差异。 _merge 旁边的行仅表示索引。

到此这篇关于Python 比较两个 CSV 文件并打印差异的文章就介绍到这了,更多相关Python 比较两个 CSV 文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pycharm实现在子类中添加一个父类没有的属性

    pycharm实现在子类中添加一个父类没有的属性

    这篇文章主要介绍了pycharm实现在子类中添加一个父类没有的属性,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • python并发场景锁的使用方法

    python并发场景锁的使用方法

    这篇文章主要介绍了python并发场景锁的使用方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • Python实现模拟登录网易邮箱的方法示例

    Python实现模拟登录网易邮箱的方法示例

    这篇文章主要介绍了Python实现模拟登录网易邮箱的方法,结合实例形式分析了Python基于urllib2及cookielib模块的http请求、数据传输及交互相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • matplotlib grid()设置网格线外观的实现

    matplotlib grid()设置网格线外观的实现

    这篇文章主要介绍了matplotlib grid()设置网格线外观的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Python3 Tkinkter + SQLite实现登录和注册界面

    Python3 Tkinkter + SQLite实现登录和注册界面

    这篇文章主要为大家详细介绍了Python3 Tkinkter + SQLite实现登录和注册界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • python3使用腾讯企业邮箱发送邮件的实例

    python3使用腾讯企业邮箱发送邮件的实例

    今天小编就为大家分享一篇python3使用腾讯企业邮箱发送邮件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python操作xls使用xlwings代提openpyxl基础

    python操作xls使用xlwings代提openpyxl基础

    这篇文章主要为大家介绍了python操作xls使用xlwings代提openpyxl示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • python实现AdaBoost算法的示例

    python实现AdaBoost算法的示例

    这篇文章主要介绍了python实现AdaBoost算法的示例,帮助大家更好的理解和了解机器学习算法,感兴趣的朋友可以了解下
    2020-10-10
  • Python音乐爬虫完美绕过反爬

    Python音乐爬虫完美绕过反爬

    这篇文章主要介绍了Python音乐爬虫完美绕过反爬的过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 关于Python中的闭包详解

    关于Python中的闭包详解

    大家好,本篇文章主要讲的是关于Python中的闭包详解,感兴趣的同学感快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01

最新评论