добрый день! Знакомлюсь с python. Необходимо подсчитать количество уникальных строк в файле. Если задаю руками список, то все ок. from collections import Counter text =""" Илья Марина Марина Марина """ text = text.split('\n') count = Counter(text) print (count) Получаю: Counter({'Марина': 3, '': 2, 'Илья': 1}) Как обработать построчно большой текстовый файл и вывести счетчик уникальных значений? Буду признателен!
Выдает только первое значение списка... from collections import Counter import re list_of_lists = [] with open(r"D:\Scripts\base.txt") as f: for line in f: inner_list = [elt.strip() for elt in line.split('\n')] list_of_lists.append(inner_list) count = Counter(inner_list) print (count)
Ты как-то немного усложнил реализацию. Все намного проще: Code: from collections import Counter counter = Counter() with open("base.txt") as file: for line in file: lineKey = line.replace('\n', '') counter[lineKey] += 1 print(counter) Это такая, более императивная реализация того что тебе нужно. Если же хочешь пайтоновской красоты, то можно вот так: Code: from collections import Counter with open("base.txt") as file: counter = Counter(line[:-1] for line in file) print(counter)
Для этих целей есть специальная базовая структура языка называется set: Code: >>> items = set([1, 2, 3, 1, 2, 2, 5]) >>> print(items) {1, 2, 3, 5}
Вижу небольшую проблемку с избавлением от символа переноса строки. Поскольку Python имеет элегантный синтаксис, призванный убедить программистов писать читаемый код, я решил бы её так: Code: from collections import Counter with open("base.txt") as file: counter = Counter(file.read().splitlines()) print(counter)
Code: from collections import Counter from pprint import pprint r = Counter([x.strip() for x in open('words.txt').readlines() if x.strip()]) pprint(r)
Подойдет ли решение для больших файлов? При попытке обработать большие файлы вечно появляются проблемы, ни потоки, не деление на части не помогает, python не занимает больше 30% нагрузки на диск. Может быть эта задача не решаемая питоном? Все-таки не самый быстрый язык.