두 개의 CSV 파일을 비교하고 Python을 사용하여 차이점 인쇄

Faaiq Bilal 2023년6월21일
  1. 방법 1: 가장 파이썬적인 솔루션을 사용하여 두 개의 CSV 파일 비교
  2. 방법 2: csv-diff - 외부 모듈을 사용하여 두 개의 CSV 파일 비교
  3. 방법 3: Pandas DataFrames를 사용하여 두 개의 CSV 파일 비교
두 개의 CSV 파일을 비교하고 Python을 사용하여 차이점 인쇄

이 기사에서는 두 CSV 파일을 비교하는 다양한 방법에 대해 설명합니다. 우리는 이 작업을 수행하는 가장 “Pythonic” 방법과 이 작업을 단순화하는 데 도움이 될 수 있는 외부 Python 모듈을 포함할 것입니다.

마지막으로 Pandas DataFrames를 사용하여 CSV 파일의 차이점을 식별하는 방법을 포함합니다.

비교해야 하는 두 CSV 파일의 제목이 file1.csvfile2.csv라고 가정합니다. 적절하다고 생각되는 파일의 이름을 바꿀 수 있습니다.

또한 아래 제공된 코드 스니펫에서 파일 이름을 적절하게 바꾸십시오.

예를 들어 다음과 같이 파일을 설정했습니다.

파일1.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: 가장 파이썬적인 솔루션을 사용하여 두 개의 CSV 파일 비교

이 방법에서는 파일의 내용을 두 개의 목록으로 읽고 목록 중 하나를 반복하고 각 줄이 두 번째 목록에 있는지 여부를 확인합니다. 논리적으로 이것은 매우 간단한 해결책입니다.

파이썬의 근본적인 효율성은 어떻게 생겼는지에도 불구하고 이 비교를 상당히 효율적으로 만듭니다.

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_onlyright_only 옆 줄에는 모든 차이점이 포함되어 있습니다. _merge 옆의 줄은 인덱스만 나타냅니다.

관련 문장 - Python CSV