如何比较两个.csv和.xlsx文件并打印出不匹配的特定字段?

2024-06-11 20:06:23 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,它们是两个不同的.csv还是.xlsx文件并不重要。 但是我需要一个关于如何识别不匹配字段的通用方法。 这两个文件在形状和大小方面都不同

例如,文件A可能有32000行,但文件B可能只有16000行。 这是因为我试图比较报告中两个不同数据库之间的偏差。 其中一个数据库是另一个数据库的源。 例如: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

它们都很好地展示了这一点,但我不希望两个文件中都没有的行出现在输出中。否则,它只会产生大量噪音


Tags: 文件csv方法id数据库员工差异firstname
1条回答
网友
1楼 · 发布于 2024-06-11 20:06:23

要从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)

我们已经读取了整个文件,但是现在只有两个dict,一个是csv_column,另一个是excel_columns

你现在要做的就是比较结果

建议:同时打印csv_columnexcel_columns以检查您使用上述代码得到了什么(因为老实说,这些代码是我去年刚刚从一个项目中复制的,但我已经忘记了一半,所以我不能完全确定输出结果。它确实有效)

相关问题 更多 >