2010-12-07 78 views
1

我有,我想對Python的第4列進行排序IP和整數列表:如何在Python中對IP地址和整數進行排序?

172.2.174.86 172.2.15.65 69694 42272874

172.2.200.100 172.2.15.20 14 4326

10.1.162.12 172.2.15.162 4741 170676

172.2.174.86 172.2.15.64 46021 33956341

10.1.167.237 172.2.15.69 921 133574

問題是Python似乎無法處理IP地址和整數在同一個列表中。我只能按字母順序排序。我怎樣做基於第4列下面的值正確的排序是我所:

lines = open("file.txt", "r").readlines() 

lines=[x.split() for x in lines] 

for i in lines: 
i.reverse() 

lines.sort(cmp, reverse=True) 

for i in lines: 
print i 

回答

2
import csv 

with open("file.txt") as f: 
    data = list(csv.reader(f, delimiter=' ')) 

def intkey(row): 
    return int(row[3]) 

data.sort(key=intkey, reverse=True) 
print data 

結果:

[['172.2.174.86', '172.2.15.65', '69694', '42272874'], 
['172.2.174.86', '172.2.15.64', '46021', '33956341'], 
['10.1.162.12', '172.2.15.162', '4741', '170676'], 
['10.1.167.237', '172.2.15.69', '921', '133574'], 
['172.2.200.100', '172.2.15.20', '14', '4326']] 
6

是你後什麼以下?

lines = open("file.txt", "r").readlines() 
lines = [x.split() for x in lines] 
lines.sort(cmp, key=lambda x:int(x[3])) 
for i in lines: 
    print i 
+0

非常感謝,這樣做!正是我所需要的 – briandowd 2010-12-07 14:17:07

+0

不客氣。 – NPE 2010-12-07 14:17:38

1

你的ip整數存儲在字符串中,對嗎?第四列是字符串的一部分?但是你可以像

l.sort(key=lambda x:x.split()[3], reverse=True) 

的東西,或者如果你想要更多的控制,你可以定義一個函數,需要2串並確定至極是最高的,然後傳遞FUNC通過CMP參數進行排序

1
lines = open("file.txt", "r").readlines() 
lines=[x.split() for x in lines] 
lines.sort(key=lambda l: int(l[3]), reverse=True) 
+0

是的,做了詭計。非常感謝! – briandowd 2010-12-07 14:17:35

1

我不認爲你需要扭轉你的線。你應該能夠線條使用

lines.sort(lambda x, y: cmp(int(x[3]), int(y[3]))) 

假設你總是在你的第四列的積分值,簡單地排序。

很好的鏈接討論Python的序列,以及如何操縱它們:Effbot

0

我無法找到乾淨簡單的方法PY做到這一點W¯¯迄今爲止,

/O長期複雜的功能和lambda表達式,

最簡單的方法

PIP安裝SH

from sh import sort 
sort('-nr', '/tmp/file1', '-o', '/tmp/file1') 

SH模塊是夢想家我知道了。