Сортировка строк в файле в соответствии с нумерацией
У меня есть 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: Десятая строка