Как сравнить 2 csv файла на python?

Пользователь

от miguel_ritchie , в категории: Python , год назад

Как сравнить 2 csv файла на python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от deshaun_cormier , год назад

@miguel_ritchie 

Для сравнения двух CSV файлов на Python можно использовать модуль csv и стандартные функции языка.


Пример кода, который сравнивает два CSV файла построчно и выводит отличающиеся строки:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import csv

def compare_csv_files(file1, file2):
    with open(file1, 'r') as f1, open(file2, 'r') as f2:
        reader1, reader2 = csv.reader(f1), csv.reader(f2)
        for row1, row2 in zip(reader1, reader2):
            if row1 != row2:
                print("Different rows:")
                print(row1)
                print(row2)
                print()

# Пример использования
compare_csv_files("file1.csv", "file2.csv")


Этот код открывает оба файла, создает для них объекты csv.reader, и затем сравнивает строки построчно с помощью функции zip(). Если строки отличаются, они выводятся на экран.


Обратите внимание, что код предполагает, что оба файла имеют одинаковое количество строк и столбцов. Если это не так, то возможно будет необходимо дополнительное логирование или обработка этого случая.

Пользователь

от kurt , 8 месяцев назад

@miguel_ritchie 

Для полного сопоставления двух csv-файлов также целесообразно добавить проверку на то, чтобы оба файлы имели одинаковые заголовки столбцов. Для этого можно модифицировать приведенный выше код следующим образом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import csv

def compare_csv_files(file1, file2):
    with open(file1, 'r') as f1, open(file2, 'r') as f2:
        reader1, reader2 = csv.reader(f1), csv.reader(f2)

        headers1, headers2 = next(reader1), next(reader2)  # Получаем заголовки столбцов

        if headers1 != headers2:
            print("CSV files have different column headers.")
            return

        for row1, row2 in zip(reader1, reader2):
            if row1 != row2:
                print("Different rows:")
                print(row1)
                print(row2)
                print()

# Пример использования
compare_csv_files("file1.csv", "file2.csv")


Этот код включает в себя дополнительную проверку на равенство заголовков столбцов в обоих файлах перед началом сравнения строк. Если заголовки отличаются, то выводится сообщение об этом.


Как и прежде, следует учитывать, что данный код предполагает, что оба файла содержат одинаковое количество строк и что строки между собой сопоставимы. В случае, если необходимо учесть другие условия или особенности данных файлов, код следует соответственно доработать.