Попытка сортировки целых чисел, но ошибка 'недопустимый литерал для int () с базой 10' - PullRequest
0 голосов
/ 04 февраля 2011

Я пытаюсь отсортировать список по 8-му столбцу (после разделения файла), НО я получаю эту ошибку:

ValueError: invalid literal for int() with base 10: '72912,'

Вот мой список, который я пытаюсь отсортировать:

UDP outside 192.168.30.33:1046 inside 192.168.84.28:161, idle 0:00:18, bytes 72912, flags  
TCP outside 192.168.120.26:1339 inside 192.168.84.17:445, idle 5:29:24, bytes 19305, flags  
TCP outside 192.168.120.26:1271 inside 192.168.84.161:139, idle 5:29:41, bytes 4346, flags  
TCP outside 192.168.120.60:1955 inside 192.168.84.100:445, idle 3:56:40, bytes 259388, flags  
TCP outside 192.168.120.60:1951 inside 192.168.84.17:445, idle 3:56:40, bytes 257120, flags   
TCP outside 192.168.120.60:1940 inside 192.168.84.161:139, idle 3:56:57, bytes 260372, flags  
TCP outside 192.168.120.49:1324 inside 192.168.84.161:445, idle 5:04:12, bytes 2705, flags

Вот мой скрипт на Python:

lines = open("home/file.txt", "r").readlines() 
lines = [x.split() for x in lines] 
lines.sort(cmp, key=lambda x:int(x[8]), reverse=True) 
for i in lines: 
    print i 

Любая помощь очень ценится с этим ...

Ответы [ 2 ]

4 голосов
/ 04 февраля 2011

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

lines.sort(cmp, key=lambda x:int(x[8][:-1]), reverse=True)

Это имеет значение.

In [1]: foo = '72912,'
In [2]: int(foo)
ValueError: invalid literal for int() with base 10: '72912,'

In [3]: int(foo[:-1])
Out[3]: 72912
2 голосов
/ 04 февраля 2011

Число, которое вы пытаетесь преобразовать в int, имеет символ ','.Итак, в вашем коде вместо

lines.sort(cmp, key=lambda x:int(x[8]), reverse=True) 

попробуйте

lines.sort(cmp, key=lambda x:int(x[8].strip(',')), reverse=True) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...