Python 2.7 按文件包含的e值列对文件内容进行正确排序
我想根据一列e值(从最后一列算起的第三列)对以制表符分隔的文件的内容进行排序,就像在excel中执行的那样。我的文件如下:Python 2.7 按文件包含的e值列对文件内容进行正确排序,python-2.7,sorting,Python 2.7,Sorting,我想根据一列e值(从最后一列算起的第三列)对以制表符分隔的文件的内容进行排序,就像在excel中执行的那样。我的文件如下: 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|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
我试过:
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
但排序后的e值为:
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
但我希望他们:
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
请注意,我也尝试过
反向=真
第2行中的标志,但它向上放置较低的e值,而不是0
请允许我建议。
感谢您的考虑您将它们排序为字符串,而不是数字。您需要首先将e值转换为一个数字。从外观上看,
float
精度对您来说是不够的(1.10E-918将变为0.0),因此您可以使用Decimal
:
from decimal import Decimal
d_list.sort(key = lambda line: Decimal(line.split("\t")[-3]))