Hướng dẫn remove duplicate line python - loại bỏ python dòng trùng lặp

44

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi có một tệp với một cột. Làm thế nào để xóa các dòng lặp lại trong một tệp?

Shog9

154K34 Huy hiệu vàng227 Huy hiệu bạc232 Huy hiệu Đồng34 gold badges227 silver badges232 bronze badges

hỏi ngày 31 tháng 7 năm 2009 lúc 22:37Jul 31, 2009 at 22:37

0

Trên Unix/Linux, hãy sử dụng lệnh

sort  | uniq
8, theo câu trả lời của David Locke, hoặc
sort  | uniq
9, theo nhận xét của William Pursell.

Nếu bạn cần một kịch bản Python:

lines_seen = set[] # holds lines already seen
outfile = open[outfilename, "w"]
for line in open[infilename, "r"]:
    if line not in lines_seen: # not a duplicate
        outfile.write[line]
        lines_seen.add[line]
outfile.close[]

Cập nhật: Kết hợp ____ 19/________ 18 sẽ xóa các bản sao nhưng trả lại một tệp với các dòng được sắp xếp, có thể hoặc không phải là thứ bạn muốn. Kịch bản Python ở trên sẽ không sắp xếp lại các dòng, mà chỉ bỏ các bản sao. Tất nhiên, để có được tập lệnh ở trên để sắp xếp, chỉ cần bỏ ra

uniqlines = set[open['/tmp/foo'].readlines[]]
2 và thay vào đó, ngay sau vòng lặp, làm
uniqlines = set[open['/tmp/foo'].readlines[]]
3.
The
sort  | uniq
9/
sort  | uniq
8 combination will remove duplicates but return a file with the lines sorted, which may or may not be what you want. The Python script above won't reorder lines, but just drop duplicates. Of course, to get the script above to sort as well, just leave out the
uniqlines = set[open['/tmp/foo'].readlines[]]
2 and instead, immediately after the loop, do
uniqlines = set[open['/tmp/foo'].readlines[]]
3.

Đã trả lời ngày 31 tháng 7 năm 2009 lúc 22:46Jul 31, 2009 at 22:46

Vinay Sajipvinay SajipVinay Sajip

92.2K14 Huy hiệu vàng173 Huy hiệu bạc182 Huy hiệu đồng14 gold badges173 silver badges182 bronze badges

7

Nếu bạn đang ở *Nix, hãy thử chạy lệnh sau:

sort  | uniq

Đã trả lời ngày 31 tháng 7 năm 2009 lúc 22:43Jul 31, 2009 at 22:43

David Lockedavid LockeDavid Locke

17.6K9 Huy hiệu vàng32 Huy hiệu bạc53 Huy hiệu Đồng9 gold badges32 silver badges53 bronze badges

0

uniqlines = set[open['/tmp/foo'].readlines[]]

Điều này sẽ cung cấp cho bạn danh sách các dòng độc đáo.

Viết lại cho một số tệp sẽ dễ dàng như:

bar = open['/tmp/bar', 'w'].writelines[uniqlines]

bar.close[]

Marco Bonelli

59.1K20 Huy hiệu vàng113 Huy hiệu bạc117 Huy hiệu đồng20 gold badges113 silver badges117 bronze badges

Đã trả lời ngày 1 tháng 8 năm 2009 lúc 12:51Aug 1, 2009 at 12:51

Marcellmarcellmarcell

1.2448 Huy hiệu bạc10 Huy hiệu đồng8 silver badges10 bronze badges

3

Bạn có thể làm:

import os
os.system["awk '!x[$0]++' /path/to/file > /path/to/rem-dups"]

Ở đây bạn đang sử dụng bash vào python :]

Bạn cũng có cách khác:

with open['/tmp/result.txt'] as result:
        uniqlines = set[result.readlines[]]
        with open['/tmp/rmdup.txt', 'w'] as rmdup:
            rmdup.writelines[set[uniqlines]]

Đã trả lời ngày 7 tháng 6 năm 2014 lúc 13:15Jun 7, 2014 at 13:15

MLSCMLSCMLSC

5.6828 Huy hiệu vàng53 Huy hiệu bạc86 Huy hiệu Đồng8 gold badges53 silver badges86 bronze badges

Nhận tất cả các dòng của bạn trong danh sách và tạo một bộ dòng và bạn đã hoàn thành. Ví dụ,

>>> x = ["line1","line2","line3","line2","line1"]
>>> list[set[x]]
['line3', 'line2', 'line1']
>>>

Nếu bạn cần bảo tồn thứ tự của các dòng - như bộ không được đặt hàng - hãy thử điều này:

y = []
for l in x:
    if l not in y:
        y.append[l]

và viết nội dung trở lại tệp.

Đã trả lời ngày 1 tháng 8 năm 2009 lúc 15:18Aug 1, 2009 at 15:18

Shahjapanshahjapanshahjapan

12.9k22 Huy hiệu vàng70 Huy hiệu bạc101 Huy hiệu đồng22 gold badges70 silver badges101 bronze badges

1

Đó là một bản thử lại của những gì đã được nói ở đây - đây là những gì tôi sử dụng.

import optparse

def removeDups[inputfile, outputfile]:
        lines=open[inputfile, 'r'].readlines[]
        lines_set = set[lines]
        out=open[outputfile, 'w']
        for line in lines_set:
                out.write[line]

def main[]:
        parser = optparse.OptionParser['usage %prog ' +\
                        '-i  -o ']
        parser.add_option['-i', dest='inputfile', type='string',
                        help='specify your input file']
        parser.add_option['-o', dest='outputfile', type='string',
                        help='specify your output file']
        [options, args] = parser.parse_args[]
        inputfile = options.inputfile
        outputfile = options.outputfile
        if [inputfile == None] or [outputfile == None]:
                print parser.usage
                exit[1]
        else:
                removeDups[inputfile, outputfile]

if __name__ == '__main__':
        main[]

Đã trả lời ngày 31 tháng 3 năm 2015 lúc 10:29Mar 31, 2015 at 10:29

Arthur Marthur mArthur M

4215 Huy hiệu bạc19 Huy hiệu đồng5 silver badges19 bronze badges

Python One Liners:

python -c "import sys; lines = sys.stdin.readlines[]; print ''.join[sorted[set[lines]]]" < InputFile > OutputFile

Đã trả lời ngày 15 tháng 9 năm 2013 lúc 9:16Sep 15, 2013 at 9:16

Rahul Patilrahul PatilRahul Patil

9843 Huy hiệu vàng12 Huy hiệu bạc29 Huy hiệu đồng3 gold badges12 silver badges29 bronze badges

Thêm vào câu trả lời của @David Locke, với *Nix Systems bạn có thể chạy

sort  | uniq
0

sẽ tạo ra

uniqlines = set[open['/tmp/foo'].readlines[]]
4 loại bỏ các bản sao theo thứ tự bảng chữ cái.

Đã trả lời ngày 27 tháng 1 năm 2017 lúc 13:18Jan 27, 2017 at 13:18

Tất cảAll Іѕ Vаиітy

23.2K14 Huy hiệu vàng83 Huy hiệu bạc106 Huy hiệu đồng14 gold badges83 silver badges106 bronze badges

1

Nhìn vào tập lệnh tôi đã tạo để xóa các email trùng lặp khỏi các tệp văn bản. Hi vọng điêu nay co ich!

sort  | uniq
1

Đã trả lời ngày 10 tháng 5 năm 2018 lúc 19:12May 10, 2018 at 19:12

Nếu bất cứ ai đang tìm kiếm một giải pháp sử dụng băm và hào nhoáng hơn một chút, thì đây là những gì tôi hiện đang sử dụng:

sort  | uniq
2

Đã trả lời ngày 28 tháng 2 năm 2017 lúc 7:05Feb 28, 2017 at 7:05

TorkoaltorkoalTorkoal

4495 Huy hiệu bạc17 Huy hiệu đồng5 silver badges17 bronze badges

1

chỉnh sửa nó trong cùng một tệp

sort  | uniq
3

Đã trả lời ngày 1 tháng 4 năm 2020 lúc 22:58Apr 1, 2020 at 22:58

Có thể đọc và súc tích

sort  | uniq
4

Đã trả lời ngày 26 tháng 10 năm 2020 lúc 7:21Oct 26, 2020 at 7:21

Ravgeet Dhillonravgeet DhillonRavgeet Dhillon

4731 Huy hiệu vàng5 Huy hiệu bạc18 Huy hiệu đồng1 gold badge5 silver badges18 bronze badges

1

Đây là giải pháp của tôi

sort  | uniq
5

Đã trả lời ngày 28 tháng 6 năm 2013 lúc 2:15Jun 28, 2013 at 2:15

sort  | uniq
6

Để lọc và xóa các giá trị trùng lặp khỏi tệp.

Đã trả lời ngày 11 tháng 6 năm 2021 lúc 9:00Jun 11, 2021 at 9:00

AshwaqashwaqAshwaq

4016 Huy hiệu bạc16 Huy hiệu Đồng6 silver badges16 bronze badges

Đây là giải pháp của tôi

sort  | uniq
7

Đã trả lời ngày 28 tháng 6 năm 2013 lúc 2:15Sep 10 at 17:51

Bài Viết Liên Quan

Chủ Đề