Hướng dẫn python compare two files and return the difference - python so sánh hai tệp và trả về sự khác biệt

Tôi đang nhắm đến việc viết một tập lệnh sẽ so sánh từng dòng trong một tệp và dựa trên so sánh này, hãy tạo một tệp mới chứa các dòng văn bản không có trong tệp thứ hai.

Ví dụ;

**File 1:** 

Bob:20 
Dan:50 
Brad:34 
Emma:32 
Anne:43

**File 2:**

Dan:50
Emma:32
Anne:43

Đầu ra mới [Tệp 3]:

Bob:20
Brad:34

Tôi có một số ý tưởng về cách này cần phải thực hiện, nhưng không chính xác:

def compare[File1,File2]:
   with open[File1, "a"] as f1:
       lines = f1.readlines[]
       string = line.split[':']
   with open[File2, "a"] as f2:
       lines = f2.readlines[]
       string2 = line.split[':']
       if string[0] == string[1]:
           with open["newfile2.txt", "w"] as f3:
            ....

Tôi nghĩ rằng tôi cần một cái gì đó dọc theo dòng này và sau đó để so sánh chuỗi [0] từ mỗi dòng của mỗi tệp nhưng tôi thực sự không biết gì từ thời điểm này.

Bất kỳ sự giúp đỡ sẽ được hoan nghênh vô cùng.

hỏi ngày 29 tháng 1 năm 2015 lúc 11:24Jan 29, 2015 at 11:24

4

Điều này đang làm việc cho tôi:

def compare[File1,File2]:
    with open[File1,'r'] as f:
        d=set[f.readlines[]]


    with open[File2,'r'] as f:
        e=set[f.readlines[]]

    open['file3.txt','w'].close[] #Create the file

    with open['file3.txt','a'] as f:
        for line in list[d-e]:
           f.write[line]

Bạn cần so sánh các đường đọc và tìm ra các dòng không có trong File2. Sau đó, bạn có thể nối các dòng này vào tệp mới.

Đã trả lời ngày 29 tháng 1 năm 2015 lúc 13:49Jan 29, 2015 at 13:49

Geekpraddgeekpraddgeekpradd

3981 Huy hiệu bạc9 Huy hiệu đồng1 silver badge9 bronze badges

5

Nếu có sự khác biệt trong dòng, chương trình sẽ in nó.

with open["H:/Ast/Hpa.java", encoding="utf8"] as f:
    with open["G:/Soft_install/Hpa.java", encoding="utf8"] as fe:
        for line in f:
            for linefe in fe:
                if [line != linefe]:
                    print[line]
                    break
                else:
                    break

Đã trả lời ngày 24 tháng 4 năm 2019 lúc 14:02Apr 24, 2019 at 14:02

2

Hướng dẫn này xem xét các phương pháp khác nhau về cách so sánh hai tệp trong Python. Chúng tôi bao gồm việc đọc hai tệp và so sánh chúng 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 tin trong Python. Python đi kèm với các mô -đun cho chính mục đích này, bao gồm các mô -đun FileCmp và Difflib. & NBSP;

Các ví dụ Python 3 sau đây đối chiếu 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 với Python 3, do đó, không cần phải tải xuống các gói bổ sung.

Chúng ta có thể so sánh hai tệp văn bản bằng hàm Open [] để đọc dữ liệu có trong các tệp. Hàm Open [] sẽ tìm kiế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 có chứa dữ liệu email. Hai danh sách các email này, chúng tôi đã nói, 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 [], nó có thể trích xuất các dòng từ tệp văn bản.

emails_A.txt[email protected][email protected][email protected][email protected][email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

emails_B.txt[email protected][email protected][email protected][email protected][email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

Khi dữ liệu được trích xuất, một loopis được sử dụng để so sánh các tệp theo từng dòng. Nếu các dòng không phù hợp, người dùng sẽ nhận được một tin nhắn cho họ biết nơi xảy ra sự không phù hợp. Chúng tôi sẽ bao gồm chính dữ liệu để người dùng có thể dễ dàng theo dõi các dòng khác nhau.for loopis used to compare the files line by line. If the lines don’t match, the user receives a message telling them where the mismatch occurred. We’ll include the data itself so the user can easily track down the different lines.

Ví 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ể, mô -đun này được sử dụng để so sánh dữ liệu giữa hai hoặc nhiều tệp. Chúng ta có thể làm điều này bằng cách sử dụng phương thức fileCmp.cmp []. 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 có giá trị.

Ví dụ này sử dụng ba tập tin. Thứ nhất và thứ ba là giống hệt nhau, trong khi thứ hai hơi khác nhau. Chúng tôi sẽ sử dụng phương thức fileCmp.cmp [] để so sánh các tệp bằng Python.

Dấu câu1.txteat bữa tối của bạn. Tôi muốn cảm ơn bố mẹ tôi, Janet và God.
Eat your dinner.
I’d like to thank my parents, Janet and God.
I’m sorry I care about you.
She’s really into cooking, her family, and her cats.

Dấu câu.TXTeat. Bạn ăn tối! Tôi muốn cảm ơn bố mẹ tôi, Janet và God. Tôi xin lỗi. Tôi quan tâm đến bạn. Cô ấy thực sự nấu ăn gia đình và những con mèo của cô ấy.
Eat. You’re dinner!
I’d like to thank my parents, Janet, and God.
I’m sorry. I care about you.
She’s really into cooking her family and her cats.

Dấu chấm câu3
Eat your dinner.
I’d like to thank my parents, Janet and God.
I’m sorry I care about you.
She’s really into cooking, her family, and her cats.

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 HĐH, cho phép chúng tôi tải một tệp bằng đường dẫn trong thư mục. Trong ví dụ này, một chức năng tùy chỉnh đã được sử dụng để hoàn thành so sánh. & NBSP;os module, which will allow us to load a file using the path in the directory. For this example, a custom function was used to complete the comparison. 

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ẽ cảnh báo người dùng về kết quả.

Ví 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.

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ể, mô -đun này được sử dụng để so sánh dữ liệu giữa hai hoặc nhiều tệp. Chúng ta có thể làm điều này bằng cách sử dụng phương thức fileCmp.cmp []. 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 có giá trị.

Ví dụ này sử dụng ba tập tin. Thứ nhất và thứ ba là giống hệt nhau, trong khi thứ hai hơi khác nhau. Chúng tôi sẽ sử dụng phương thức fileCmp.cmp [] để so sánh các tệp bằng Python.

Dấu câu1.txteat bữa tối của bạn. Tôi muốn cảm ơn bố mẹ tôi, Janet và God.with statement to read the file data. By using the Python with statement, we can safely open and read files.

Dấu câu.TXTeat. Bạn ăn tối! Tôi muốn cảm ơn bố mẹ tôi, Janet và God. Tôi xin lỗi. Tôi quan tâm đến bạn. Cô ấy thực sự nấu ăn gia đình và những con mèo của cô ấy.
Chelsea Walker 3.3
Caroline Bennett 2.8
Garry Holmes 3.7
Rafael Rogers 3.6
Patrick Nelson 2.1

Dấu chấm câu3
Chelsea Walker 3.6
Caroline Bennett 2.7
Garry Holmes 3.7
Rafael Rogers 3.7
Patrick Nelson 2.1

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 HĐH, cho phép chúng tôi tải một tệp bằng đường dẫn trong thư mục. Trong ví dụ này, một chức năng tùy chỉnh đã được sử dụng để hoàn thành so sánh. & NBSP;

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

Bob:20
Brad:34
0

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ể, mô -đun này được sử dụng để so sánh dữ liệu giữa hai hoặc nhiều tệp. Chúng ta có thể làm điều này bằng cách sử dụng phương thức fileCmp.cmp []. 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 có giá trị.

Ví dụ này sử dụng ba tập tin. Thứ nhất và thứ ba là giống hệt nhau, trong khi thứ hai hơi khác nhau. Chúng tôi sẽ sử dụng phương thức fileCmp.cmp [] để so sánh các tệp bằng Python.csv module, we can quickly access the data within a csv file.

Dấu câu1.txteat bữa tối của bạn. Tôi muốn cảm ơn bố mẹ tôi, Janet và God.

Nhân viên. Cooper Cooper ,, [email & NBSP; được bảo vệ]
“First Name”,”Last Name”,”Email”
“David”,”Crawford”,”[email protected]”
“Sarah”,”Payne”,”[email protected]”
“Robert”,”Cooper”,”[email protected]”
“Aida”,”Alexander”,”[email protected]”
“Valeria”,”Douglas”,”[email protected]”

Nhân viênB.CSV tên đầu tiên, tên cuối cùng, tên của họ Cooper Cooper ,, [email & NBSP; được bảo vệ]
“First Name”,”Last Name”,”Email”
“Andrew”,”Crawford”,”[email protected]”
“Sarah”,”Payne”,”[email protected]”
“Robert”,”Cooper”,”[email protected]”
“Agata”,”Anderson”,”[email protected]”
“Miley”,”Holmes”,”[email protected]”

Khi chúng tôi có dữ liệu nhân viên, chúng tôi có thể đọc nó bằng hàm Reader []. Chứa trong mô -đun CSV, hàm đầu đọc [] 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 một vòng lặp cho vòng lặp, chúng tôi sẽ so sánh các yếu tố của hai danh sách. Mỗi phần tử sẽ giữ một dòng từ các tệp dữ liệu nhân viên. Bằng cách này, chúng ta có thể lặp lại các danh sách và khám phá dòng nào không giống nhau.

Chương trình Python sẽ so sánh từng dòng tệp. Do đó, 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.

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

Bob:20
Brad:34
1

Đầu ra

Bob:20
Brad:34
2

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á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. Ngoài ra, chúng tôi đã thấy cách sử dụng chúng để so sánh các tệp theo 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 tôi sử dụng hàng ngày được cung cấp bởi Python.

Bài viết liên quan

  • Cách chia văn bản bằng hàm python split []
  • Danh sách Python hiểu và cách sử dụng nó

Khuyến nghị đào tạo Python

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 hướng dẫn cho người mới bắt đầu. Tìm hiểu làm thế nào để tạo các ứng dụng trong thế giới thực và làm chủ những điều cơ bản.

Làm thế nào tôi có thể so sánh hai tệp cho sự khác biệt?

So sánh các tập tin [lệnh diff]..
Để so sánh hai tệp, nhập như sau: Diff Chap1.Bak Chap1.Điều này hiển thị sự khác biệt giữa Chap1.....
Để so sánh hai tệp trong khi bỏ qua sự khác biệt về lượng không gian trắng, hãy nhập các loại sau: Diff -w prog.c.bak prog.c ..

== So sánh trong Python là gì?

Toán tử == so sánh giá trị hoặc bình đẳng của hai đối tượng, trong khi đó, toán tử là toán tử kiểm tra xem hai biến có hướng đến cùng một đối tượng trong bộ nhớ hay không.Trong phần lớn các trường hợp, điều này có nghĩa là bạn nên sử dụng các toán tử bình đẳng == và! =, Ngoại trừ khi bạn so sánh với không có ai.compares the value or equality of two objects, whereas the Python is operator checks whether two variables point to the same object in memory. In the vast majority of cases, this means you should use the equality operators == and != , except when you're comparing to None .

Bài Viết Liên Quan

Chủ Đề