Cara menggunakan python difflib htmldiff example

Python - comparing two text files with difflib.HtmlDiff()

Python tip:

You can use HtmlDiff to generate an HTML table that shows a side by side, line by line comparison of the text with inter-line and intra-line change highlights.

https://docs.python.org/3/library/difflib.html#difflib.HtmlDiff

An example👇

import difflib
from pathlib import Path

first_file_lines = Path('first.txt').read_text().splitlines()
second_file_lines = Path('second.txt').read_text().splitlines()

html_diff = difflib.HtmlDiff().make_file(first_file_lines, second_file_lines)
Path('diff.html').write_text(html_diff)

  • Cari disini...
  • Courses

    • Kategori

    • Web Development

    • Mobile Development

    • Studi Kasus

    • Fundamental

    • Pemula

    • Teknologi Populer

    • Laravel

    • PHP

    • Kotlin

    • Android

    • Javascript

    • Wordpress

    • Database

    • Semua Kelas

    • Flashsale

    • Popular

    • Mentor

    • Roadmap

  • Explore

    • Karir

      Temukan Karirmu

    • Tutorial & Artikel

      Temukan Artikel menarik

    • Podcast

      Podcast seputar pemrograman

    • Webinar

      Ikuti Berbagai Webinar

    • Event

      Temukan Event menarik

    • Beasiswa

      Program Beasiswa

    • Discord

      Komunitas Discord

    • Forum

      Diskusi antar Programmer

    • Leaderboard

      Ranking siswa Codepolitan

  • Partnership

    • For Company

      Solusi tepat untuk perusahaan

    • For School

      Kerjasama untuk sekolah

    • For Campus

      Kerjasama untuk kampus

    • For Mentor

      Peluang penghasilan untuk mentor

LoginRegister

Artikel ini akan membahas panduan menggunakan modul “difflib” dengan Python. Modul difflib dapat digunakan untuk membandingkan dua objek Python dari tipe tertentu dan melihat persamaan atau perbedaan di antara keduanya. Semua contoh kode dalam artikel ini diuji dengan Python 3.9.5 di Ubuntu 21.04.

Tentang Modul Difflib

Modul difflib, seperti namanya, dapat digunakan untuk menemukan perbedaan atau “diff” antara konten file atau objek Python hashable lainnya. Ini juga dapat digunakan untuk menemukan rasio yang menunjukkan tingkat kesamaan antara dua objek. Penggunaan modul difflib dan fungsinya dapat dipahami dengan baik melalui contoh. beberapa dari mereka terdaftar di bawah ini.

Tentang Objek Python yang Dapat Di-hash

Dalam Python, tipe objek yang nilainya tidak mungkin berubah atau sebagian besar tipe objek yang tidak dapat diubah disebut tipe hashable. Objek tipe hashable memiliki nilai tetap tertentu yang ditetapkan oleh Python selama deklarasi dan nilai-nilai ini tidak berubah selama masa pakainya. Semua objek hashable di Python memiliki metode “__hash__”. Lihat contoh kode di bawah ini:

 print (type(word))
print (word.__hash__())

dictionary = {"a" : 1, "b": 2}
print (type(dictionary))
print (dictionary.__hash__())

Setelah menjalankan contoh kode di atas, Anda akan mendapatkan output berikut:

     print (dictionary.__hash__())
TypeError: 'NoneType' object is not callable

Contoh kode mencakup tiga tipe Python: objek tipe integer, objek tipe string, dan objek tipe kamus. Keluaran menunjukkan bahwa ketika memanggil metode “__hash__”, objek tipe integer dan objek tipe string menunjukkan nilai tertentu, sedangkan objek tipe kamus melontarkan error karena tidak memiliki metode yang disebut “__hash__”. Oleh karena itu tipe integer atau tipe string adalah objek hashable dalam Python sedangkan tipe kamus tidak. Anda dapat mempelajari lebih lanjut tentang objek hashable dari sini.

Membandingkan Dua Objek Python yang Dapat Di-hash

Anda dapat membandingkan dua tipe atau urutan hashable menggunakan kelas “Differ” yang tersedia di modul difflib. Lihat contoh kode di bawah ini.

 line2 = "cdef"
d = Differ()
difference = list(d.compare(line1, line2))
print (difference)

Pernyataan pertama mengimpor kelas Differ dari modul difflib. Selanjutnya, dua variabel tipe string didefinisikan dengan beberapa nilai. Sebuah instance baru dari kelas Differ kemudian dibuat sebagai "d". Dengan menggunakan instance ini, metode "bandingkan" kemudian dipanggil untuk menemukan perbedaan antara string "baris1" dan "baris2". String ini disediakan sebagai argumen untuk metode perbandingan. Setelah menjalankan contoh kode di atas, Anda akan mendapatkan output berikut:

 line2 = "cdef"
d = Differ()
difference = list(d.compare(line1, line2))
difference = 'n'.join(difference)
print (difference)

Setelah menjalankan contoh kode di atas, Anda akan mendapatkan output berikut:

 line2 = "cdef"
d = HtmlDiff()
difference = d.make_file(line1, line2)
print (difference)

Contoh kodenya sama seperti di atas, kecuali bahwa instance kelas Differ telah digantikan oleh turunan kelas HtmlDiff dan alih-alih metode perbandingan, Anda sekarang memanggil metode "make_file". Setelah menjalankan perintah di atas, Anda akan mendapatkan beberapa output HTML di terminal. Anda dapat mengekspor output ke file menggunakan simbol ">" di bash atau Anda dapat menggunakan contoh kode di bawah ini untuk mengekspor output ke file "diff.html" dari Python itu sendiri.

 line2 = "cdef"
d = HtmlDiff()
difference = d.make_file(line1, line2)
with open("diff.html", "w") as f:
    for line in difference.splitlines():
        print (line, file=f)

Pernyataan “with open” dalam cara “w” membuat file “diff.html” baru dan menyimpan seluruh isi variabel “difference” ke fi
le diff.html. Saat Anda membuka file diff.html di browser, Anda akan mendapatkan tata letak yang mirip dengan ini:

Mendapatkan Perbedaan Antara Isi Dua File

Jika Anda ingin menghasilkan data yang berbeda dari isi dua file menggunakan metode Differ.compare(), Anda dapat menggunakan pernyataan “dengan terbuka” dan metode “readline” untuk membaca isi file. Contoh di bawah mengilustrasikan hal ini di mana konten "file1.txt" dan "file2.txt" dibaca menggunakan pernyataan "dengan terbuka". Pernyataan "dengan terbuka" digunakan untuk membaca data dari file dengan aman.

     file1_lines = f.readlines()
with open ("file2.txt") as f:
    file2_lines = f.readlines()
d = Differ()
difference = list(d.compare(file1_lines, file2_lines))
difference = 'n'.join(difference)
print (difference)

Kodenya cukup mudah dan hampir sama dengan contoh yang ditunjukkan di atas. Dengan asumsi bahwa "file1.txt" berisi karakter "a", "b", "c", dan "d" masing-masing pada baris baru dan "file2.txt" berisi "c", "d", "e", dan karakter “f” masing-masing pada baris baru, contoh kode di atas akan menghasilkan output sebagai berikut:

Menemukan Rasio Kesamaan

Anda dapat menggunakan kelas "sequenceMatcher" dari modul difflib untuk menemukan rasio kesamaan antara dua objek Python. Rentang rasio kesamaan terletak antara 0 dan 1 dimana memiliki nilai 1 menunjukkan kecocokan yang tepat atau kesamaan maksimum. Nilai 0 menunjukkan objek yang benar-benar unik. Lihat contoh kode di bawah ini:

 line2 = "cdef"
sm = SequenceMatcher(a=line1, b=line2)
print (sm.ratio())

Instance SequenceMatcher telah dibuat dengan objek untuk dibandingkan yang diberikan sebagai argumen "a" dan "b". Metode "rasio" kemudian dipanggil ke instance untuk mendapatkan rasio kesamaan. Setelah menjalankan contoh kode di atas, Anda akan mendapatkan output berikut: