2014-03-24 71 views
3

我有一個包含以如下方式的數據的txt文件:Python的不尋常的文件排序

23  1  65  15  19.2 
19  2  66  25  25.7 
10  3  67  35  16.5 
100  4  68  45  10.4 
20  5  69  55  6.8 
201  6  64  65  9.2 

在文件中,各值是從其他使用\噸分離,然後\ n作爲下一行。

我想根據每行的第一個值對這個文件進行排序。 我的預期成果是:

10  3  67  35  16.5 
19  2  66  25  25.7 
20  5  69  55  6.8 
23  1  65  15  19.2 
100  4  68  45  10.4 
201  6  64  65  9.2 

但我得到的實際產量爲:

10  3  67  35  16.5 
100  4  68  45  10.4 
19  2  66  25  25.7 
20  5  69  55  6.8 
201  6  64  65  9.2 
23  1  65  15  19.2 

其採取的值作爲字符串,因此不能將全部的數字值作爲整數。 我嘗試解析,但它不工作。

我的代碼:

with open('filename.txt') as fin: 
     lines = [line.split() for line in fin] 
lines.sort(key=itemgetter(0),reverse=True) 

with open('newfile.txt', 'w') as fout: 
    for i in lines: 
      fout.write('{0}\t\t\t\t\n'.format('\t\t\t '.join(i))) 

如果可能的話請幫忙。

+0

只需管道到'sort -n'也可以做到這一點。 –

回答

10

你目前比較字符串,你需要比較整數:

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

字符串是字典順序比較,所以:

>>> '2' > '100' 
True 

轉換爲int修復此問題:

>>> int('2') > int('100') 
False 
2

另請參閱pandas,如果您計劃e以後再進行更復雜的操作,例如:

import pandas as pd 

pd.read_table('filename.txt', header=None)\ 
      .sort(columns=0)\ 
      .to_csv('newfile.txt', sep='\t', header=None, index=False) 
+0

嘿,我試過這個,但它需要安裝熊貓軟件包..我有n臺機器來處理..所以我選擇了大熊貓。但是,謝謝 – rkatkam