Python 比較兩個(gè) CSV 文件的三種方法并打印出差異
本文將討論比較兩個(gè) CSV 文件的各種方法。 我們將包括執(zhí)行此操作的最“Pythonic”方式和可幫助簡(jiǎn)化此任務(wù)的外部 Python 模塊。
最后,我們將包括一種使用 Pandas DataFrames 識(shí)別 CSV 文件差異的方法。
我們假設(shè)需要比較的兩個(gè) CSV 文件的標(biāo)題為 file1.csv 和 file2.csv。 您可以根據(jù)需要重命名文件。
還請(qǐng)?jiān)谙旅娼o出的代碼片段中適當(dāng)?shù)靥鎿Q文件名。
出于示例目的,我們的文件設(shè)置如下:
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 的解決方案比較兩個(gè) CSV 文件
在這個(gè)方法中,我們將文件的內(nèi)容讀入兩個(gè)列表,遍歷其中一個(gè)列表并檢查每一行是否存在于第二個(gè)列表中。 從邏輯上講,這是一個(gè)非常簡(jiǎn)單的解決方案。
Python 的潛在效率使這種比較相當(dāng)有效,盡管它看起來像。
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)
上面的代碼片段會(huì)將不同的行打印到您的終端。
在我們的測(cè)試用例中,我們得到以下輸出。
1,3,4,5,6,1
2,3,1,4,1,5
方法 2:使用 csv-diff - 外部模塊比較兩個(gè) CSV 文件
首先,在終端中使用以下命令安裝模塊。
python3 -m pip install csv-diff
安裝后,您無需編寫 Python 腳本。 您可以使用以下命令直接在終端中運(yùn)行它。
csv-diff file1.csv file2.csv --key=id
運(yùn)行此命令將在您的終端上顯示差異。
在我們的測(cè)試用例中,我們得到以下輸出。
1 row added, 1 row removed
1 row added
1: 2
2: 3
3: 1
4: 4
5: 1
6: 51 row removed
1: 1
2: 3
3: 4
4: 5
5: 6
6: 1
要將此模塊用作 Python 腳本的一部分,您可以編寫類似于以下內(nèi)容的腳本。
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 比較兩個(gè) CSV 文件
以下腳本可以為您執(zhí)行此任務(wù)。
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))
請(qǐng)注意,在 read_csv 方法中,參數(shù) header=None 被輸入,因?yàn)槲覀兊臏y(cè)試文件沒有任何標(biāo)題。 如果您的文件有標(biāo)題,您可以使用以下方法讀取它:pd.read_csv("file1.csv")
,其中 file1.csv 將被您的文件替換。
如果您的文件不在與腳本相同的目錄中,請(qǐng)?zhí)峁?CSV 文件的完整路徑。
上面的 Python 腳本應(yīng)該生成如下輸出:
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
旁邊的行僅表示索引。
到此這篇關(guān)于Python 比較兩個(gè) CSV 文件并打印差異的文章就介紹到這了,更多相關(guān)Python 比較兩個(gè) CSV 文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python操作csv文件之csv.writer()和csv.DictWriter()方法的基本使用
- Python Pandas讀寫txt和csv文件的方法詳解
- Python 修改CSV文件實(shí)例詳解
- python讀取和保存為excel、csv、txt文件及對(duì)DataFrame文件的基本操作指南
- 利用python合并csv文件的方式實(shí)例
- Python中CSV文件(逗號(hào)分割)實(shí)戰(zhàn)操作指南
- Python讀取CSV文件并進(jìn)行數(shù)據(jù)可視化繪圖
- python用pd.read_csv()方法來讀取csv文件的實(shí)現(xiàn)
- Python如何讀取csv文件時(shí)添加表頭/列名
相關(guān)文章
pycharm實(shí)現(xiàn)在子類中添加一個(gè)父類沒有的屬性
這篇文章主要介紹了pycharm實(shí)現(xiàn)在子類中添加一個(gè)父類沒有的屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03Python實(shí)現(xiàn)模擬登錄網(wǎng)易郵箱的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)模擬登錄網(wǎng)易郵箱的方法,結(jié)合實(shí)例形式分析了Python基于urllib2及cookielib模塊的http請(qǐng)求、數(shù)據(jù)傳輸及交互相關(guān)操作技巧,需要的朋友可以參考下2018-07-07matplotlib grid()設(shè)置網(wǎng)格線外觀的實(shí)現(xiàn)
這篇文章主要介紹了matplotlib grid()設(shè)置網(wǎng)格線外觀的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Python3 Tkinkter + SQLite實(shí)現(xiàn)登錄和注冊(cè)界面
這篇文章主要為大家詳細(xì)介紹了Python3 Tkinkter + SQLite實(shí)現(xiàn)登錄和注冊(cè)界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11python3使用騰訊企業(yè)郵箱發(fā)送郵件的實(shí)例
今天小編就為大家分享一篇python3使用騰訊企業(yè)郵箱發(fā)送郵件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06python操作xls使用xlwings代提openpyxl基礎(chǔ)
這篇文章主要為大家介紹了python操作xls使用xlwings代提openpyxl示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08python實(shí)現(xiàn)AdaBoost算法的示例
這篇文章主要介紹了python實(shí)現(xiàn)AdaBoost算法的示例,幫助大家更好的理解和了解機(jī)器學(xué)習(xí)算法,感興趣的朋友可以了解下2020-10-10