Чтобы найти 10 самых частых строк в файле и напечатать их в лексикографическом порядке:
#!/usr/bin/env python3
import sys
from collections import Counter
c = Counter(line.strip() for line in sys.stdin)
for line, n in sorted(c.most_common(10)):
print(n, line)
Пример, если сохранить этот код в топ-cтрок файл и дать разрешение на исполнение chmod +x топ-cтрок:
$ ./топ-cтрок <example.txt >out.txt
Или на Windows (если .py не присутствует в %PATHEXT%):
C:\> py топ-cтрок <example.txt >out.txt
Чтобы отсортировать входной файл, который не помещается в памяти, можно использовать временные файлы. Чтобы найти дубликаты в уже отсортированном файле, можно использовать itertools.groupby().
Байты в файле декодируются в Юникодный текст, используя sys.stdin.encoding или если чтение происходит из файла, открытого внутри скрипта (open(filename)), то используется locale.getpreferredencoding(False) кодировка (что-нибудь вроде cp1251 на Винде и utf-8 на Маке, Linux). Если необходимо использовать другую кодировку, то следует задать encoding параметр у open() вызова или установить PYTHONIOENCODING переменную окружения, чтобы изменить кодировку ввода/вывода (stdin/stdout/stderr).
По умолчанию сортировка происходит в лексикографическом порядке для Юникодных символов (ord(c)), например, порядок сортировки больших (А) и маленьких букв (а) может отличаться от результатов sort утилиты, которая использует текущую локаль по умолчанию (сравни результаты: sort и LC_ALL=C sort). Чтобы принять во внимание особенности сортировки в заданном языке, можно использовать russian_strings.sort(key=icu.Collator.createInstance(icu.Locale('ru')).getSortKey). Возможно также полезно провести нормализацию строк (unicodedata.normalize()), чтобы одинаково ё (u'\u0451') и ё (u'\u0435\u0308') сортировать.
Если возникают проблемы с печатью Юникодных строк на Винде, то установи win-unicode-console пакет, см.: Как из Python вывести на Windows-консоль строку в Юникоде? На других системах достаточно локаль настроить и/или установить переменные окружения LANG, LC_ALL, LC_CTYPE, PYTHOIOENCODING (последнее -- если вывод перенаправлен), например:
$ LC_ALL=C.UTF-8 ./топ-cтрок <example.txt
Запись и чтение файлов
Словари и их сортировка
– Apr 09 '13 at 13:51