Hướng dẫn how do you find duplicates in a text file using python? - làm cách nào để bạn tìm thấy các bản sao trong tệp văn bản bằng python?

Tôi có một tệp văn bản với khoảng 1.200 hàng. Một số trong số họ là bản sao.

Làm thế nào tôi có thể tìm thấy các dòng trùng lặp trong tệp (nhưng không lo lắng về trường hợp) và sau đó in văn bản của dòng trên màn hình, để tôi có thể tắt và tìm thấy nó? Tôi không muốn xóa chúng hoặc bất cứ điều gì, chỉ cần tìm thấy những dòng nào có thể là.

Hướng dẫn how do you find duplicates in a text file using python? - làm cách nào để bạn tìm thấy các bản sao trong tệp văn bản bằng python?

JWW

93,8K87 Huy hiệu vàng387 Huy hiệu bạc844 Huy hiệu đồng87 gold badges387 silver badges844 bronze badges

hỏi ngày 17 tháng 10 năm 2012 lúc 15:26Oct 17, 2012 at 15:26

4

Điều này khá dễ dàng với một bộ:

with open('file') as f:
    seen = set()
    for line in f:
        line_lower = line.lower()
        if line_lower in seen:
            print(line)
        else:
            seen.add(line_lower)

Đã trả lời ngày 17 tháng 10 năm 2012 lúc 15:28Oct 17, 2012 at 15:28

Hướng dẫn how do you find duplicates in a text file using python? - làm cách nào để bạn tìm thấy các bản sao trong tệp văn bản bằng python?

Mgilsonmgilsonmgilson

290K62 Huy hiệu vàng610 Huy hiệu bạc677 Huy hiệu đồng62 gold badges610 silver badges677 bronze badges

9

Vì chỉ có 1200 dòng, vì vậy bạn cũng có thể sử dụng collections.Counter():

>>> from collections import Counter

>>> with open('data1.txt') as f:
...     c=Counter(c.strip().lower() for c in f if c.strip()) #for case-insensitive search
...     for line in c:
...         if c[line]>1:
...             print line
... 

Nếu data1.txt là một cái gì đó như thế này:

ABC
abc
aBc
CAB
caB
bca
BcA
acb

đầu ra là:

cab
abc
bca

Đã trả lời ngày 17 tháng 10 năm 2012 lúc 15:34Oct 17, 2012 at 15:34

Hướng dẫn how do you find duplicates in a text file using python? - làm cách nào để bạn tìm thấy các bản sao trong tệp văn bản bằng python?

Ashwini Chaudharyashwini ChaudharyAshwini Chaudhary

238K56 Huy hiệu vàng451 Huy hiệu bạc499 Huy hiệu Đồng56 gold badges451 silver badges499 bronze badges

0

Tìm kiếm các bản sao không nhạy cảm trường hợp

Điều này sẽ không cung cấp cho bạn số dòng, nhưng nó sẽ cung cấp cho bạn một danh sách các dòng trùng lặp mà sau đó bạn có thể điều tra thêm. Ví dụ:

tr 'A-Z' 'a-z' < /tmp/foo | sort | uniq -d

Ví dụ Tệp dữ liệu

# /tmp/foo
one
One
oNe
two
three

Đường ống được liệt kê ở trên sẽ mang lại chính xác:

một

Tìm số dòng

Sau đó, bạn có thể grep cho các số dòng liên quan như vậy:

grep --ignore-case --line-number one /tmp/foo

Đã trả lời ngày 17 tháng 10 năm 2012 lúc 15:36Oct 17, 2012 at 15:36

Hướng dẫn how do you find duplicates in a text file using python? - làm cách nào để bạn tìm thấy các bản sao trong tệp văn bản bằng python?

Todd A. Jacobstodd A. JacobsTodd A. Jacobs

78.8K14 Huy hiệu vàng141 Huy hiệu bạc195 Huy hiệu Đồng14 gold badges141 silver badges195 bronze badges

Dưới đây là một chương trình ngắn trong Python để xác định số lượng các dòng trùng lặp trong một tệp văn bản.

import tkinter as tk
from tkinter import filedialog
from collections import defaultdict
import pandas as pd
import collections
from pathlib import Path
import os

root= tk.Tk()

canvas1 = tk.Canvas(root, width = 800, height = 300)
canvas1.pack()

label1 = tk.Label(root, text='Log Analyser')
label2 = tk.Label(root, text='Import a file...')
label1.config(font=('Arial', 20))
label2.config(font=('Arial', 10))
canvas1.create_window(400, 50, window=label1)
canvas1.create_window(200, 180, window=label2)

def getLogFile ():
      global df

      import_file = filedialog.askopenfilename()
      Counter = 0

      with open(import_file, "r+") as f:
            d = f.readlines()
            f.seek(0)
            entries = Path(import_file)
            fileabspath = os.path.abspath(import_file)
                        
            fw= open(fileabspath.replace(entries.name,"Duplicate_Log_Info.txt"),"w+")
            
            counts = collections.Counter(l.strip() for l in f)
            for line, count in counts.most_common():
                #print (line, "|"+str(count))
                fw.write(line + "|"+str(count) + "\n")
            label3 = tk.Label(root, text=entries.name + ": Import is successful, Please check the output file - "+ fw.name + ".")
            label3.config(font=('Arial', 10))
            canvas1.create_window(400, 220, window=label3)
            f.close()
            fw.close()

            
browseButton_Excel = tk.Button(text='Choose a file...', command=getLogFile, bg='green', fg='white', font=('helvetica', 12, 'bold'))
canvas1.create_window(400, 180, window=browseButton_Excel)

button3 = tk.Button (root, text='Close', command=root.destroy, bg='green', font=('helvetica', 11, 'bold'))
canvas1.create_window(500, 180, window=button3)

root.mainloop()

Output:

  • Hướng dẫn how do you find duplicates in a text file using python? - làm cách nào để bạn tìm thấy các bản sao trong tệp văn bản bằng python?
  • Hướng dẫn how do you find duplicates in a text file using python? - làm cách nào để bạn tìm thấy các bản sao trong tệp văn bản bằng python?

Nếu bạn thích bài đăng trên blog này, vui lòng chia sẻ nó với bạn bè của bạn!