2016-07-08 4 views
1

excelで実行されるようなe値の列(最後から3列目)に基づいてタブ区切りファイルの内容をソートしたい。以下のように私のファイルがされていますカラムを含む電子値でファイルの内容を適切にソート

or1|306502419 or1|306502419 100 1175 0 0 1 1175 1 1175 1.10E-18 2381.7 100 
or1|306502428 or1|306502428 100 704 0 0 1 704 1 704 1.10E-22 1354 100 
or1|306502451 or1|306502451 100 1039 0 0 1 1039 1 1039 1.10E-918 2081.2 100 
or1|306502451 or2|315578614 99.1 1039 9 0 1 1039 1 1039 6.70E-296 2065.8 100 
or1|306502443 or1|306502443 100 551 0 0 1 551 1 551 6.20E-297 1100.9 100 
or1|306502365 or1|306502365 100 620 0 0 1 620 1 620 0 1221.1 100 
or1|306502365 or3|315163411 99.7 620 2 0 1 620 1 620 0 1219.1 100 
or1|306502371 or3|315163404 100 590 0 0 1 590 1 590 0 1209.5 100 
or1|306502371 or1|306502371 100 590 0 0 1 590 1 590 0 1209.5 100 
or1|306502380 or1|306502380 100 560 0 0 1 560 1 560 1.10E-10 1113.6 100 
or1|306502380 or3|315163395 98.9 560 6 0 1 560 1 560 1.10E-14 1098.2 100 

私が試してみました:

0 
0 
0 
0 
1.10E-10 
1.10E-14 
1.10E-18 
1.10E-22 
1.10E-918 
6.70E-296 
6.20E-297 

しかし、私は彼らがなりたい::

d_list = [line.strip() for line in open("input_file.txt")] 
d_list.sort(key = lambda line: line.split("\t")[-3]) 
for line in d_list: 
    print line 

しかし、ソートされた電子値は

0 
0 
0 
0 
1.10E-918 
6.20E-297 
6.70E-296 
1.10E-22 
1.10E-18 
1.10E-14 
1.10E-10 

plz私も試したことに注意してください

逆= LINE2に

フラグ真それは低いE値上方ではなく、0を置きます。

Plzが推奨します。 あなたの配慮ありがとう

答えて

1

数字ではなく文字列としてソートされています。最初にe値を数値にキャストする必要があります。見た目からは、floatの精度では不十分です(1.10E-918は0.0になる)ので、Decimalを使用できます。

from decimal import Decimal 
d_list.sort(key = lambda line: Decimal(line.split("\t")[-3])) 
関連する問題