Подсчитайте и покажите, сколько раз строка дублируется в файле - PullRequest
0 голосов
/ 11 января 2019

Я видел решения для этого в bash (т.е. вопрос 6712437), но я не нашел ни одного для python.

Я пытаюсь найти файл, найти повторяющиеся строки и вывести, сколько раз он дублируется.

ввод

foo
bar
foo
foo
bar
foobar

вывод

foo     3
bar     2
foobar  1

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Самое простое решение будет использовать collections.Counter. Но если вы не хотите включать дополнительную библиотеку, тогда

d={}
with open('test.txt') as f:
    for i in f:
        d[i]=d.get(i,0)+1

    sorted_items = sorted(d.items(),key=lambda (k,v): (v,k),reverse=True)
    #iterate to save or play around with tuple values
0 голосов
/ 11 января 2019

Вот мое решение:

lines = [] #List of line items
itemcounts = {}  #dictionary of items with counts
with open('myfile.txt') as f: 
    for item in f:
        lines.append(item)
for i in lines:
    c = lines.count(i) 
    itemcounts.update({i:c})
#print items and counts
for i in itemcounts: 
    print i, itemcounts[i]
0 голосов
/ 11 января 2019

collections.Counter кажется хорошим вариантом.

Для подсчета количества вхождений каждой строки в файле, которые вы можете попробовать:

import collections

with open('myfile.txt') as f:
    c = collections.Counter(f.readlines())

Затем, для хорошего вывода (как вы просили в комментарии к этому ответу), вы можете использовать:

# sorted by value (number of occurences, but descending order)
for k, v in c.most_common():
    print(k, v)

# sorted by value (number of occurences, ascending order)
for k, v in sorted(c.items(), key=lambda x: x[1]):
    print(k, v)

# sorted by key (line of the file)
for k, v in sorted(c.items(), key=lambda x: x[0]):
    print(k, v)
...