Сортировка огромного файла за Python - PullRequest
0 голосов
/ 06 марта 2020

Я реализовал Алгоритм двоичного поиска для Python3. Проблема заключается в том, что файлы должны быть отсортированы в соответствии с логами сравнения строк Pythons c. Bash sort не делает этого. Пример:

aa      first
aaA     second
aaa     third

Этот файл отсортирован правильно согласно Python3, потому что 'aa' < 'aaA' < 'aaa'

Если я отсортирую его с использованием bash (sort --key=1 --field-separator=$'\t' file.txt), я получу:

aaA     second
aaa     third
aa      first

Существует ли эффективный способ "правильно" отсортировать огромные файлы для Python?

Было бы проще научить мой алгоритм сравнению строк bash метод?

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Заказ bash зависит от ваших предпочтений. Ваше предпочтение сортировки может быть найдено с помощью

echo "LC_ALL"

Когда я использую

export LC_ALL=en_US.UTF-8

, я получаю ваш «неправильный» заказ. Это может быть «исправлено» с помощью

export LC_ALL=C

или

# wrong: LC_ALL=C sort --key=1 --field-separator=\t file.txt

РЕДАКТИРОВАТЬ: @mivk ответил с некоторыми исправлениями, команда должна быть

LC_ALL=C sort --field-separator=$'\t' file.txt
1 голос
/ 06 марта 2020

sort использует ваши locale правила для сортировки. По-видимому, вам нужна сортировка в стиле "C".

Поэтому измените локаль только для команды сортировки:

LC_ALL=C sort $your_file

Кроме того, вам не нужно указывать --key=1 так как это по умолчанию.

И --field-separator=\t не устанавливает для него символ табуляции, а просто "t". Если вам нужно указать символ табуляции, вы можете написать --field-separator=$'\t'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...