Как отсортировать выходной файл по второму параметру? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь отсортировать результат, который я записываю в выходной файл после определенного символа ':' по целому числу после символа.

Сначала я попытался использовать функцию сортировки, но она не работала, так как это не был список.Я также пытался преобразовать все в список строк и пытался сортировать их соответствующим образом, но не думаю, что это самый эффективный способ.

ПРИМЕЧАНИЕ: строки выходного файла - это все строки

**Current written output in output_file1.txt:**
hi: 011
hello: 000
hero: 001
You are done!

**Expected written output in output_file1.txt:**
hello: 000
hero: 001
hi: 011
You are done!

Спасибо за вашу помощь.

Ответы [ 3 ]

1 голос
/ 16 апреля 2019
with open(filepath) as file:
    r = file.readlines()

#splits based on ":" and then sort using the second value ie binary numbers
s = sorted([line.split(":") for line in r[1:-1]], key=lambda x: int(x[1]))

s.insert(0,r[0])
s.append(r[-1])

#Write 's' into File
0 голосов
/ 16 апреля 2019

Как уже упоминалось выше, нет способа отсортировать файл на месте.

Что касается вашего второго вопроса, вы можете использовать list.sort(key=sort_key). Это позволяет вам предоставить метод, который применяется к каждому элементу в вашем списке при сравнении элементов для сортировки.

В вашем случае вы можете определить простую функцию, которая извлекает последние три символа и сортирует их по алфавиту:

def num_sort(x):
   return x[-3:]
your_list.sort(key=num_sort)
0 голосов
/ 16 апреля 2019

Я бы вставил строки по порядку с самого начала, вы можете сделать это эффективно, используя бинарный поиск.

Q : Как сравнить текущее число в текущей строке с вашим старым файлом.

Ответ :

Случай 1: Если максимальное количество строк равно 111 (в вашем примере вы начинаете с 001, я предполагаю, что вы дополнены нулями, чтобы показать, сколько цифр вы ожидаете на число), или вы теперь Максимальное количество строк, вы можете заполнить с достаточным количеством нулей, тогда все, что вам нужно сделать, это сравнить ваш текущий номер с текущими тремя последними записями в вашей строке (строка [-3:]).

Случай 2: Вы не знаете количество цифр:

Sol 2.1: Вы можете попробовать сохранить файл для слов и файл для чисел и обновлять их параллельно, это избавит вас от накладных расходов Sol 2.2.

Sol 2.2: Разделите строку разделителем ':' и получите номер (не забудьте, что после разделителя есть пробел).

Это то, что я мог бы придумать сейчас!

...