Bandingkan dua file csv baris demi baris python

Tantangan hari ini sangat mudah, kita perlu menulis program Python sederhana untuk membandingkan dua file CSV untuk menentukan apakah ada perbedaan di antara keduanya.  

Untuk setiap baris, jika berbeda, kami mengeluarkan nomor baris diikuti dengan konten baris dari kedua file

Bandingkan dua file csv baris demi baris python
Bandingkan dua file csv baris demi baris python
tanda1. csv

Misalnya, jika konten file CSV pertama adalah

Petrus, 30
Kevin,12
Sam,15
Oliver, 45


Bandingkan dua file csv baris demi baris python
Bandingkan dua file csv baris demi baris python
tanda2. csv

dan konten file CSV kedua adalah
Petrus, 30
Kevin,32
Sam,15
Oliver,49

Program harus memberi kita output berikut

Perbedaan Ditemukan
Baris 2 (Kevin,12 vs Kevin,32)
Baris 4 (Oliver,45 vs Oliver,49)

Berikut adalah video yang menunjukkan cara kerja program.  

Solusi yang disarankan dan menjalankannya dapat ditemukan di bawah

Solusi yang Disarankan

f = open ('marks1.csv', 'r')
g = open ('marks2.csv', 'r')
line = 0

print('Differences Found')

while True:
    lineF = f.readline().strip()
    lineG = g.readline().strip()
    line += 1

    if (lineF or lineG):
        if (lineF != lineG):
            print("Line %d (%s vs %s)" %(line, lineF, lineG))
    else:
        f.close()
        g.close()
        break

Konsep Utama yang Digunakan

  • Operasi berkas
  • while loop

Melintasi

Kita mulai dengan membuka dua file (marks1. csv dan mark2. csv) dan menyimpannya ke dalam variabel f dan g. Selanjutnya, kita mendeklarasikan variabel bernama line dan menginisialisasinya ke 0. Kami juga menggunakan fungsi print()_ untuk mencetak baris 'Differences Found'

Sekarang kita siap untuk mengulang melalui file

Kami menggunakan while True loop untuk melakukan itu. Ini adalah loop tak terbatas yang akan terus berjalan sampai kita entah bagaimana mengakhirinya.  

Di dalam loop, kami menggunakan metode readline() untuk membaca dua file baris demi baris. Perhatikan bahwa kami menambahkan metode strip()_ setelah metode readline() untuk kedua file

Metode strip()_ adalah metode Python bawaan yang menghapus semua spasi awal dan akhir dari sebuah string. (Kami juga dapat menggunakannya untuk menghapus karakter lain, tetapi pengaturan defaultnya adalah menghapus spasi. )

Kami melakukan itu karena kami tidak ingin program menyimpulkan bahwa dua baris berbeda hanya karena satu baris memiliki ruang di ujungnya sementara yang lain tidak. Untuk tujuan kami, kami ingin program memperlakukan 'Halo' dan 'Halo   ‘ sebagai hal yang sama

Setelah kita membaca satu baris dari setiap file, kita menambahkan 1 ke variabel line

Selanjutnya, kami menggunakan f_1 untuk menentukan apakah ada konten yang dibaca. Selama ada konten yang dibaca, f2 dan f3 tidak akan kosong dan kondisinya akan dievaluasi menjadi f4.  

Ketika itu terjadi, kami membandingkan f_2 dengan f3 dan menampilkan pesan yang menunjukkan perbedaan antara f2 dan f3 jika berbeda

Di sisi lain, jika akhir kedua file tercapai, f2 dan f3 akan kosong. Dalam hal ini, kami menutup kedua file dan menggunakan perintah g1 untuk keluar dari loop

Artikel ini akan membahas berbagai metode untuk membandingkan dua file CSV. Kami akan menyertakan cara paling "Pythonic" untuk melakukan operasi ini dan modul Python eksternal yang dapat membantu menyederhanakan tugas ini

Terakhir, kami akan menyertakan metode menggunakan Pandas DataFrames untuk mengidentifikasi perbedaan dalam file CSV

Kami akan berasumsi bahwa dua file CSV yang perlu kami bandingkan diberi judul

1,2,3,4,5,6
4,5,6,7,8,9
2,3,1,4,1,5
0 dan
1,2,3,4,5,6
4,5,6,7,8,9
2,3,1,4,1,5
1. Anda dapat mengganti nama file sesuai keinginan Anda

Harap ganti juga nama file dengan benar dalam cuplikan kode yang diberikan di bawah ini

Untuk tujuan contoh, kami memiliki pengaturan file kami sebagai berikut

1,2,3,4,5,6
4,5,6,7,8,9
2,3,1,4,1,5
_0

1,2,3,4,5,6
4,5,6,7,8,9
1,3,4,5,6,1
_

1,2,3,4,5,6
4,5,6,7,8,9
2,3,1,4,1,5
_1

1,2,3,4,5,6
4,5,6,7,8,9
2,3,1,4,1,5
_

Metode 1. Bandingkan Dua File CSV Menggunakan Solusi Kebanyakan Pythonic

Dalam metode ini, kami membaca konten file ke dalam dua daftar, beralih ke salah satu daftar dan memeriksa apakah setiap baris ada di daftar kedua atau tidak. Logikanya, ini adalah solusi yang sangat sederhana

Efisiensi yang mendasari Python membuat perbandingan ini cukup efisien, terlepas dari tampilannya

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)

Cuplikan kode di atas akan mencetak baris yang berbeda ke terminal Anda

Dalam kasus pengujian kami, kami mendapatkan yang berikut sebagai output

Metode 2. Bandingkan Dua File CSV Menggunakan 1,2,3,4,5,6 4,5,6,7,8,9 2,3,1,4,1,5 4 - Modul Eksternal

Pertama, instal modul menggunakan perintah berikut di terminal Anda

python3 -m pip install csv-diff
_

Setelah diinstal, Anda tidak perlu menulis skrip Python. Anda dapat menjalankan ini langsung di terminal dengan perintah berikut

csv-diff file1.csv file2.csv --key=id

Menjalankan perintah ini akan menampilkan perbedaan pada terminal Anda

Dalam kasus pengujian kami, kami mendapatkan yang berikut sebagai output

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

Untuk menggunakan modul ini sebagai bagian dari skrip Python, Anda dapat menulis skrip seperti berikut ini

from csv_diff import load_csv, compare

difference = compare(
    load_csv(open("file1.csv")),
    load_csv(open("file2.csv"))
)
print(difference)

Output untuk ini adalah sebagai berikut

{'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': []}

Metode 3. Bandingkan Dua File CSV Menggunakan Pandas DataFrames

Skrip berikut dapat melakukan tugas ini untuk Anda

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

Harap perhatikan bahwa dalam metode

1,2,3,4,5,6
4,5,6,7,8,9
2,3,1,4,1,5
_5, argumen
1,2,3,4,5,6
4,5,6,7,8,9
2,3,1,4,1,5
6 dimasukkan karena file pengujian kami tidak memiliki header apa pun. Jika file Anda memiliki header, Anda dapat membacanya menggunakan.
1,2,3,4,5,6
4,5,6,7,8,9
2,3,1,4,1,5
7, di mana
1,2,3,4,5,6
4,5,6,7,8,9
2,3,1,4,1,5
0 akan digantikan oleh file Anda

Jika file Anda tidak ada di direktori yang sama dengan skrip Anda, berikan path lengkap ke file CSV Anda

Skrip Python di atas harus menghasilkan output seperti

   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

Baris di sebelah

1,2,3,4,5,6
4,5,6,7,8,9
2,3,1,4,1,5
9 dan
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)
0 mengandung semua perbedaan. Baris di sebelah
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 hanya mewakili indeks

Bagaimana cara membandingkan 2 file CSV dengan Python?

csv-diff .
Instalasi. pip instal csv-diff
Penggunaan. Pertimbangkan dua file CSV. .
Sebagai perpustakaan Python. Anda juga dapat mengimpor pustaka Python ke dalam kode Anda sendiri seperti itu. dari csv_diff import load_csv, bandingkan diff = bandingkan( load_csv(open("one. csv"), key="id"), load_csv(open("dua. csv"), key="id") )

Bagaimana cara membandingkan data antara dua file CSV?

Klik tombol "Bandingkan" untuk membandingkan file CSV Anda . Anda dapat memilih untuk hanya menampilkan baris dengan perbedaan atau menampilkan semuanya (Dengan kode warna untuk memvisualisasikan perbedaan). Anda juga dapat langsung membandingkan dua file CSV dengan menentukan urlnya di parameter GET url1 dan url2.

Bagaimana cara membandingkan dua file dalam Python baris demi baris?

Metode 1. Menggunakan unified_diff() . Untuk mendapatkan perbedaan menggunakan pustaka difflib, kita harus memanggil fungsi unified_diff() untuk perbandingan ini. Parameter. file1. Daftar String seperti file_1_text.

Bagaimana cara membandingkan 2 file CSV di panda?

Panda juga memiliki fungsi merge() yang berguna untuk membandingkan kedua file CSV. Itu melakukan gabungan dalam, gabungan luar atau keduanya bergabung pada kolom. Anda harus meneruskan kerangka data yang ingin Anda bandingkan sebagai daftar di dalam metode gabungan (). Fungsi akan membandingkan dan mengembalikan kerangka data.