So sánh hai tệp csv theo từng dòng python

Hướng dẫn này kiểm tra các phương pháp khác nhau về cách so sánh hai tệp trong Python. Chúng tôi sẽ bao gồm việc đọc hai tệp và so sánh chúng theo từng dòng, cũng như sử dụng các mô-đun có sẵn để hoàn thành nhiệm vụ chung này

Có nhiều cách để so sánh hai tệp trong Python. Python đi kèm với các mô-đun cho mục đích này, bao gồm các mô-đun filecmp và difflib.  

Các ví dụ về Python 3 sau đây so sánh các phương pháp khác nhau để xác định xem hai tệp có chứa cùng một dữ liệu hay không. Chúng tôi sẽ sử dụng các chức năng và mô-đun được tích hợp sẵn trong Python 3, vì vậy không cần tải xuống các gói bổ sung

So sánh hai tệp csv theo từng dòng python

So sánh hai tệp văn bản theo từng dòng

Chúng ta có thể so sánh hai tệp văn bản bằng hàm open() để đọc dữ liệu chứa trong tệp. Hàm open() sẽ tìm một tệp trong thư mục cục bộ và cố gắng đọc nó

Đối với ví dụ này, chúng tôi sẽ so sánh hai tệp chứa dữ liệu email. Chúng tôi được biết hai danh sách email này có thể không giống nhau. Chúng tôi sẽ để Python kiểm tra các tệp cho chúng tôi. Sử dụng phương thức readlines(), có thể trích xuất các dòng từ tệp văn bản

email_A. txt
[email được bảo vệ]
[email được bảo vệ]
[email được bảo vệ]
[email được bảo vệ]
[email được bảo vệ]

email_B. txt
[email được bảo vệ]
[email được bảo vệ]
[email được bảo vệ]
[email được bảo vệ]
[email được bảo vệ]

Sau khi dữ liệu được trích xuất, một vòng lặp for được sử dụng để so sánh các tệp theo từng dòng. Nếu các dòng không khớp, người dùng sẽ nhận được thông báo cho họ biết nơi xảy ra sự không khớp. Chúng tôi sẽ bao gồm dữ liệu để người dùng có thể dễ dàng theo dõi các dòng khác nhau

Thí dụ. Sử dụng Python để so sánh danh sách email

file1 = open("emails_A.txt",'r')
file2 = open("emails_B.txt",'r')

file1_lines = file1.readlines()
file2_lines = file2.readlines()

for i in range(len(file1_lines)):
    if file1_lines[i] != file2_lines[i]:
        print("Line " + str(i+1) + " doesn't match.")
        print("------------------------")
        print("File1: " + file1_lines[i])
        print("File2: " + file2_lines[i])

file1.close()
file2.close()

đầu ra

Line 1 doesn't match.
------------------------
File1: [email protected]

File2: [email protected]

Line 3 doesn't match.
------------------------
File1: [email protected]

File2: [email protected]

Line 4 doesn't match.
------------------------
File1: [email protected]

File2: [email protected]

Sử dụng Mô-đun filecmp để so sánh các tệp

Mô-đun filecmp bao gồm các chức năng để làm việc với các tệp trong Python. Cụ thể module này dùng để so sánh dữ liệu giữa 2 hay nhiều file. Chúng ta có thể làm điều này bằng cách sử dụng filecmp. cmp() phương pháp. Phương thức này sẽ trả về True nếu các tệp khớp hoặc Sai nếu chúng không khớp

Ví dụ này sử dụng ba tệp. Cái thứ nhất và thứ ba giống hệt nhau, trong khi cái thứ hai hơi khác một chút. Chúng tôi sẽ sử dụng filecmp. cmp() để so sánh các tệp bằng Python

dấu câu1. txt
Ăn bữa tối của bạn
Tôi muốn cảm ơn bố mẹ tôi, Janet và Chúa
Tôi xin lỗi tôi quan tâm đến bạn
Cô ấy thực sự thích nấu ăn, gia đình và những chú mèo của cô ấy

dấu câu2. txt
Ăn. Bạn đang ăn tối
Tôi muốn cảm ơn bố mẹ tôi, Janet và Chúa
Tôi xin lỗi. tôi quan tâm đến bạn
Cô ấy thực sự thích nấu ăn cho gia đình và những chú mèo của cô ấy

dấu câu3. txt
Ăn bữa tối của bạn
Tôi muốn cảm ơn bố mẹ tôi, Janet và Chúa
Tôi xin lỗi tôi quan tâm đến bạn
Cô ấy thực sự thích nấu ăn, gia đình và những chú mèo của cô ấy

Trước khi chúng tôi có thể sử dụng mô-đun filecmp, chúng tôi sẽ cần nhập nó. Chúng tôi cũng cần nhập mô-đun os, mô-đun này sẽ cho phép chúng tôi tải tệp bằng đường dẫn trong thư mục. Đối với ví dụ này, một chức năng tùy chỉnh đã được sử dụng để hoàn thành việc so sánh.  

Sau khi chúng tôi so sánh các tệp, chúng tôi có thể xem liệu dữ liệu có khớp hay không. Cuối cùng, chúng tôi sẽ thông báo cho người dùng về kết quả

Thí dụ. So sánh hai tệp với filecmp. cmp()

import filecmp
import os

# notice the two backslashes
file1 = "C:\\Users\jpett\\Desktop\\PythonForBeginners\\2Files\\punctuation1.txt"
file2 = "C:\\Users\jpett\\Desktop\\PythonForBeginners\\2Files\\punctuation2.txt"
file3 = "C:\\Users\jpett\\Desktop\\PythonForBeginners\\2Files\\punctuation3.txt"

def compare_files(file1,file2):
    compare = filecmp.cmp(file1,file2)

    if compare == True:
        print("The files are the same.")
    else:
        print("The files are different.")

compare_files(file1,file2)
compare_files(file1,file3)

đầu ra

The files are different.
The files are the same.

So sánh hai tệp bằng mô-đun difflib

Mô-đun difflib rất hữu ích để so sánh các văn bản và tìm ra sự khác biệt giữa chúng. Mô-đun Python 3 này được đóng gói sẵn với ngôn ngữ. Nó chứa nhiều chức năng hữu ích để so sánh nội dung của văn bản

Đầu tiên, chúng ta sẽ sử dụng hàm unity_diff() để xác định sự không khớp giữa hai tệp dữ liệu. Các tệp này chứa thông tin về sinh viên hư cấu, bao gồm tên và điểm trung bình của họ.  

Thứ hai, chúng tôi sẽ so sánh các hồ sơ học sinh này và kiểm tra xem điểm của học sinh thay đổi như thế nào từ năm 2019 đến năm 2020. Chúng ta có thể làm điều này bằng cách sử dụng hàm unity_diff(). Ví dụ sau sử dụng câu lệnh with để đọc dữ liệu tệp. Bằng cách sử dụng câu lệnh Python with, chúng ta có thể mở và đọc tệp một cách an toàn

sinh viên_gpa_2019. txt
ChelseaWalker 3. 3
Caroline Bennett 2. 8
Garry Holmes 3. 7
Raphael Rogers 3. 6
Patrick Nelson 2. 1

sinh viên_gpa_2020. txt
ChelseaWalker 3. 6
Caroline Bennett 2. 7
Garry Holmes 3. 7
Raphael Rogers 3. 7
Patrick Nelson 2. 1

Thí dụ. So sánh điểm trung bình của sinh viên

import difflib

with open("student_gpa_2019.txt",'r') as file1:
    file1_contents = file1.readlines()
with open("student_gpa_2020.txt",'r') as file2:
    file2_contents = file2.readlines()

diff = difflib.unified_diff(
    file1_contents, file2_contents, fromfile="file1.txt",
    tofile="file2.txt", lineterm='')

for line in diff:
    print(line)

đầu ra

--- file1.txt
+++ file2.txt
@@ -1,5 +1,5 @@
-Chelsea        Walker 3.3
-Caroline       Bennett 2.8
+Chelsea        Walker 3.6
+Caroline       Bennett 2.7
 Garry  Holmes 3.7
-Rafael Rogers 3.6
+Rafael Rogers 3.7
 Patrick        Nelson 2.1

Nhìn vào đầu ra, chúng ta có thể thấy rằng mô-đun difflib làm được nhiều việc hơn là so sánh từng dòng tệp văn bản. Hàm unity_diff() cũng cung cấp một số ngữ cảnh về sự khác biệt được tìm thấy

so sánh hai. tệp csv trong Python theo từng dòng

Các tệp giá trị được phân tách bằng dấu phẩy được sử dụng để trao đổi dữ liệu giữa các chương trình. Python cũng cung cấp các công cụ để làm việc với các tệp này. Bằng cách sử dụng mô-đun csv, chúng tôi có thể nhanh chóng truy cập dữ liệu trong tệp csv

Sử dụng mô-đun csv, chúng tôi sẽ so sánh hai tệp dữ liệu và xác định các dòng không khớp. Các tệp này chứa hồ sơ nhân viên, bao gồm tên, họ và email của từng nhân viên. Dữ liệu này được tạo ngẫu nhiên, nhưng chúng tôi sẽ giả vờ rằng nhân viên của chúng tôi cần chúng tôi gấp để hoàn thành việc so sánh

nhân viênA. csv
“Tên”,”Họ”,”Email”
“David”,”Crawford”,”[email được bảo vệ]”
“Sarah”,”Payne”,”[email được bảo vệ]”
“Robert”,”Cooper”,”[email được bảo vệ]”
“Aida”,”Alexander”,”[email được bảo vệ]”
“Valeria”,”Douglas”,”[email được bảo vệ]”

nhân viênB. csv
“Tên”,”Họ”,”Email”
“Andrew”,”Crawford”,”[email được bảo vệ]”
“Sarah”,”Payne”,”[email được bảo vệ]”
“Robert”,”Cooper”,”[email được bảo vệ]”
“Agata”,”Anderson”,”[email được bảo vệ]”
“Miley”,”Holmes”,”[email được bảo vệ]”

Khi chúng tôi có dữ liệu nhân viên, chúng tôi có thể đọc nó bằng chức năng reader(). Có trong mô-đun csv, hàm reader() có thể diễn giải dữ liệu csv. Với dữ liệu được thu thập, chúng ta có thể sử dụng Python để chuyển đổi dữ liệu thành danh sách

Cuối cùng, sử dụng vòng lặp for, chúng ta sẽ so sánh các phần tử của hai danh sách. Mỗi phần tử sẽ chứa một dòng từ tệp dữ liệu nhân viên. Bằng cách này, chúng tôi có thể lặp lại các danh sách và khám phá những dòng nào không giống nhau

Chương trình Python sẽ so sánh các tệp theo từng dòng. Nhờ đó, chúng tôi có thể xác định tất cả sự khác biệt giữa các tệp dữ liệu nhân viên

Thí dụ. Sử dụng mô-đun csv để so sánh các tệp dữ liệu nhân viên

import csv

file1 = open("employeesA.csv",'r')
file2 = open("employeesB.csv",'r')

data_read1= csv.reader(file1)
data_read2 = csv.reader(file2)

# convert the data to a list
data1 = [data for data in data_read1]
data2 = [data for data in data_read2]

for i in range(len(data1)):
    if data1[i] != data2[i]:
        print("Line " + str(i) + " is a mismatch.")
        print(f"{data1[i]} doesn't match {data2[i]}")

file1.close()
file2.close()

đầu ra

Line 1 is a mismatch.
['David', 'Crawford', '[email protected]'] doesn't match ['Andrew', 'Crawford', '[email protected]']
Line 4 is a mismatch.
['Aida', 'Alexander', '[email protected]'] doesn't match ['Agata', 'Anderson', '[email protected]']
Line 5 is a mismatch.
['Valeria', 'Douglas', '[email protected]'] doesn't match ['Miley', 'Holmes', '[email protected]']

Tóm lại là

Python cung cấp nhiều công cụ để so sánh hai tệp văn bản, bao gồm cả tệp csv. Trong bài đăng này, chúng tôi đã thảo luận về nhiều chức năng và mô-đun đi kèm với Python 3. Hơn nữa, chúng ta đã thấy cách sử dụng chúng để so sánh các tệp theo từng dòng trong Python

Bằng cách khám phá các mô-đun mới, chúng ta có thể viết các chương trình giúp cuộc sống của chúng ta dễ dàng hơn. Nhiều chương trình và ứng dụng web mà chúng ta sử dụng hàng ngày được cung cấp bởi Python

bài viết liên quan

  • Cách tách văn bản bằng hàm split() trong python
  • Hiểu danh sách Python và cách sử dụng nó

Có liên quan

Đào tạo Python được đề xuất

Khóa học. Python 3 cho người mới bắt đầu

Hơn 15 giờ nội dung video với hướng dẫn có hướng dẫn cho người mới bắt đầu. Tìm hiểu cách tạo các ứng dụng trong thế giới thực và nắm vững kiến ​​thức cơ bản

Làm cách nào để so sánh 2 tệp CSV bằng Python?

csv-diff .
Cài đặt. cài đặt pip csv-diff
Cách sử dụng. Xem xét hai tệp CSV. .
Là một thư viện Python. Bạn cũng có thể nhập thư viện Python vào mã của riêng mình như vậy. từ csv_diff nhập load_csv, so sánh diff = so sánh( load_csv(open("one. csv"), key="id"), load_csv(open("hai. csv"), key="id") )

Làm cách nào để tìm sự khác biệt giữa hai tệp CSV?

Cuối cùng, để so sánh hai tệp, hãy chạy lệnh fc filename1. tên tệp csv2. .
Nhấn phím tắt Windows + R để mở dấu nhắc Run của windows
Nhập cmd và nhấn Enter để mở cửa sổ cmd terminal của DOS
Thay đổi đường dẫn hiện tại bằng cách chạy lệnh cd C. \path\to\your\directory để đến vị trí của hai tệp CSV