簡體   English   中英

如何比較兩個.csv 和.xlsx 文件並打印出與特定字段不匹配的內容?

[英]How to compare two .csv and .xlsx files and print out mismatched for a particular field?

因此,它們是否是兩個不同的文件並不重要。csv 或 .xlsx 文件。 但是我需要一種通用的方法來判斷不匹配的字段。 這兩個文件在形狀和大小方面都不同。

例如,文件 A 可能有 32,000 行,但文件 B 可能只有 16,000 行。 這是因為我試圖從報告中比較兩個不同數據庫之間的偏差。 其中一個數據庫是另一個數據庫的來源。 例如:dbA 饋入 dbB,使 dbA 成為 dbB 的超集。

現在出現了問題,我試圖在兩個數據庫中匹配employeeID。

例如,假設文件 A 包含以下內容

firstname, lastname, namekey, employeeID, SSN

文件 B 包含

firstname, lastname, namekey, username, email_address, phone_number, EmployeeID, SSN

我必須匹配的字段將基於employeeID=EmployeeID。 如何打印出僅顯示 ID 不匹配的行的差異視圖?

  • 我不想要文件 A 中不在文件 B 中的行
  • 我不想要文件 B 中不在文件 A 中的行
  • 我只想要根據兩個文件中的某些標准員工 ID 不匹配的行

標准可以是任何東西,從技術上講,我可以運行 SQL 命令來提取 .csv 或 .xlsx 文件以提取一些唯一鍵標識符,因為我們有通用名稱但不同的員工 ID 號。

所以我想 SSN 可能是主要的過濾器,嘿,這個 ID 對於這個 SSN 是不同的。 我只需要一種方法來完成此操作並生成一個顯示差異的文件。 因為我熟悉很多不同的東西,所以我不太關心我必須使用什么語言。 但主要是 Python 或其他一些可以很好地解析它並且不依賴於操作系統的工具。

到目前為止,我已經嘗試過:

vimdiff
git diff --color-words="[^[:space:],]+" x.csv y.csv

他們都很好地展示了它,但我不希望兩個文件中都不存在的行出現在 output 中。 否則,它只會產生很多噪音。

要從 csv 讀取列中的所有值:

from csv import DictReader as csv_DictReader
csv_file = defaultdict(list)
filepath = "whatever/myfile.csv"
with filepath.open(encoding="cp1252") as file:
    reader = csv_DictReader(file)  
    for row in reader:
        for (k, v) in row.items():
            csv_file[k].append(v)
csv_column = csv_file['employeeID']  # Tell it what column to read

要從 excel 中讀取列中的所有值:

from openpyxl import load_workbook
filepath = "whatever/myfile.xlsx"
excel_file = load_workbook(filepath)
excel_sheet = excel_file.active
excel_columns = {}
for column in "ABC": # Tell it what columns to read
    if column not in excel_columns:
        excel_columns[column] = []
    for row in range(1, excel_sheet.max_row + 1):
        cell_name = f"{column}{row}"
        recovered_columns[column].append(self.excel_sheet[cell_name].value)

所以我們已經閱讀了整個文件,但現在你只有兩個字典,一個是csv_column另一個是excel_columns

您現在要做的就是比較結果。

建議:打印csv_columnexcel_columns以檢查您使用上面的這些代碼得到了什么(因為讓我們在這里完全誠實,那些我只是從我去年工作的項目中復制粘貼它們,但我已經忘記了其中的一半,所以我不完全確定 output。它只是工作)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM