2013-06-04 84 views
1

所以我在文件中的下列輸出(千行) input.txt中上的行排序號升序排列

2956:1 1076:1 4118:1 1378:1 2561:1 
1039:1 1662:1 
1948:1 894:1 1797:1 1662:1 

問題是我必須按升序編號

排序每一行

所需的輸出: output.txt的

1076:1 1378:1 2561:1 2956:1 4118:1 
1039:1 1662:1 
894:1 1662:1 1797:1 1948:1 

這已成爲一個真正的挑戰,得到它的權利,即時尋找一個Python函數d這對我來說。這些行必須保持它們的順序,但每行必須按升序排序(就像輸出一樣)。

有關如何做到這一點的任何想法?

回答

11
with open('input.txt') as f, open('output.txt', 'w') as out: 
    for line in f: 
     line = line.split() #splits the line on whitespaces and returns a list 
     #sort the list based on the integer value of the item on the left side of the `:` 
     line.sort(key = lambda x: int(x.split(':')[0])) 
     out.write(" ".join(line) + '\n') 

輸出:

1076:1 1378:1 2561:1 2956:1 4118:1 
1039:1 1662:1 
894:1 1662:1 1797:1 1948:1 
+1

Python的答案,爲什麼會出現這麼多的愛;-) – iruvar

+0

@Ashwini喬杜裏........... 1個問題,我怎麼確保它每行刪除雙打?沒有從文件雙打,只是不允許有雙打線.... svm軟件不喜歡它:P –

+0

@ RHK-S8雙打是什麼意思? –

2

不確定蟒,但一般來說,我會採取每一行作爲「記錄」,然後「爆炸」行到由分隔陣列空間(或正則表達式的一組空格或製表符,或任何分隔符),然後一個簡單的數組排序,然後「內爆」回到一個字符串。

我的「引號」等價於PHP函數。

1

一種方式來做到這一點是這樣的:

def sort_input(input_file): 
    for line in input_file: 
    nums = line.strip().split() 
    nums.sort(key=lambda x: int(x.split(':')[0])) 
    print ' '.join(nums)