потому что функция python open
возвращает некоторый String
объект, поэтому число, подобное этому "11"
, но не 11
, вы можете преобразовать его как int()
, но есть простой способ, используйте pandas
Moudle. Я предполагаю, что ваш текст таков:
11 Tom
2 Tom
20 Ben
20 Tom
21 Ben
1. сначала используйте стороннюю (рекомендуем)
. вам нужно установить pandas, pip install pandas
.
pands.read_csv site
import pandas as pd
# sep is Delimiter to use, default is comma
df = pd.read_csv('winners.txt', header=None, names=['num', 'name'], sep=' ', dtype={'num': int, 'name': str})
df = df.sort_index(by='num')
df.to_csv('SortWin.txt', index=False, sep=' ', header=None, mode='w+')
наконец, результат будет такой
2 Tom
11 Tom
20 Ben
20 Tom
21 Ben
2. оригинальное решение для функций Python
Не используйте сторонние, мы тоже можем это сделать.
def sort():
winfile = list()
with open ('winners.txt') as fin:
for line in fin:
winfile.append(line.strip('\n'))
winfile.sort(key=lambda x: int(x.split(' ')[0]))
with open('SortWin.txt', 'w+') as fout:
for winfile in winfile:
fout.write(winfile + '\n')