Сортировка строк в файле в соответствии с нумерацией

У меня есть txt-файл с перемешанными внутри строками. Надо просмотреть нумерацию строк (пример: 1: , 2: и т.д.) и отсортировать их в файле

filename = input()
file = open(filename, 'r+')
check = dict()
newcontent = """"""
strnum = ''
for i in file.readlines:
    for s in i:
        if i != ':':
            strnum += s
        else:
            check.update([int(strnum), s])
            break
for s in sorted(check).keys:
    newcontent += check[i] + '\n'
file = newcontent
print(file.readlines)

Пример ввода:

1: Первая строка
10: Десятая строка
5: Пятая строка
8: Восьмая строка
3: Третья строка

Пример вывода:

1: Первая строка
3: Третья строка
5: Пятая строка
8: Восьмая строка
10: Десятая строка

Ответы (2 шт):

Автор решения: Sergey

Примерно так:

# Открываем файл на чтение
filename = input()
file = open(filename, 'r+')
src_list = []

# Перебираем все строки файла
for line in file:
    split_line = line.split(':') # Разбиваем строку по символу ':'
    num_line = int(split_line[0]) # Преобразуем строку номера в число  
    src_list.append( (num_line, split_line[1])) # Добавляем в итоговый массив
    
src_list.sort() # Сортируем по числовому ключу

print(src_list)
→ Ссылка
Автор решения: Stanislav Volodarskiy

В вашем коде неудачно использован словарь (хотя можно его заставить работать как вы хотите), перепутаны переменные в последнем цикле, .keys не работает, печать печатает не то. Так много всего, что, наверно, проще начать с нуля.

# получить имя файла
fname = input()

# прочитать все строки файла в список
with open(fname) as f:
    lines = f.readlines()

# упорядочить по номеру строки до двоеточия
lines.sort(key=lambda line: int(line[:line.index(':')]))

# распечатать
for line in lines:
    print(line, end='')
$ cat file.txt
1: Первая строка
10: Десятая строка
5: Пятая строка
8: Восьмая строка
3: Третья строка

$ echo file.txt | python sort.py
1: Первая строка
3: Третья строка
5: Пятая строка
8: Восьмая строка
10: Десятая строка

Но я привык к другому интерфейсу - без использования явного имени файла:

import sys

lines = sys.stdin.readlines()
lines.sort(key=lambda line: int(line[:line.index(':')]))
for line in lines:
    print(line, end='')
$ python sort.py < file.txt
1: Первая строка
3: Третья строка
5: Пятая строка
8: Восьмая строка
10: Десятая строка

А ещё в операционных системах уже есть подходящая утилита. Код не нужен:

$ sort -n file.txt
1: Первая строка
3: Третья строка
5: Пятая строка
8: Восьмая строка
10: Десятая строка
→ Ссылка