2016-04-15 5 views
1

Вот мой .txt файлСортировка текстового файла в Python

-22, www 1213 
-25, ttt 1234 
-20, yyy 8883 

Я хочу заказать линии на основе первого числа.

Я пытался так:

f = open('file_.txt','rb') 
text = f.readlines() 
sorted(text, key=lambda row: row[0], reverse=True) 

но порядок тот же. Использование вариации для отсортированного линии

sorted(text, key=lambda row: float(row[0]), reverse=True) 

Я получаю следующее сообщение об ошибке:

ValueError: could not convert string to float: - 

Что я делаю неправильно?

ответ

2
sorted(text, key=lambda row: float(row.split()[0].rstrip(',')), reverse=True) 

Проблема заключалась в том, что вы разбирали по первому символу, вы хотите, чтобы первое слово (без запятой), можно также разделить на запятой.

+0

Спасибо, это сработало –

1

Причина, по которой ваша сортировочная лямбда не работает, заключается в том, что строка [0] является первым символом, а не первым значением. Вы можете изменить его на row.split (',') [0], и он будет работать по назначению. Кроме того, лучше всего использовать инструкцию для открытия файлов.

with open('file_.txt','rb'): 
    text = f.readlines() 
sorted(text, key=lambda row: row.split(',')[0], reverse=True) 

В вашем втором примере, вы получаете ошибку значение по той же причине, вы, по сути говоря, поплавок («- 22, WWW 1213»). если вы действительно хотите, чтобы сделать это было бы

float(row.split(',')[0]) 

и если там могут быть пробелы:

float(row.split(',')[0].strip())