对包含数字的名称进行排序

时间:2014-04-03 13:59:33

标签: python sorting

我想根据列[0]对包含15列的制表符分隔数据文件进行排序,即我的输入文件(我只说明第0列)

输入文件和所需的输出文件

contig1               contig1
contig102             contig1
contig405             contig2
contig1               contig17
contig2               contig102
contig1005            contig405
contig17              contig1005

下面的脚本排序,但是从1&lt;在图2中,它给了我所有的重叠群,其中1然后传递到2,同样从0 <0。 1,给我102前2,如何改进呢?

f1 = open('file.txt','r')
a=sorted(f1.readlines(), key=lambda l: l.split()[0]))
r=open('file.txt','w')
r.writelines(a)
f1.close

2 个答案:

答案 0 :(得分:1)

如果

l.split()[0]

给出

contig1
contig102

您想要排序

int(l.split()[0][6:])

1
102

a = sorted(f1, key=lambda l: int(l.split()[0][6:]))

答案 1 :(得分:1)

这个怎么样:

import re

def alphanumsort(x):
    reg = re.compile('(\d+)')
    splitted = reg.split(x)
    return [int(y) if y.isdigit() else y for y in splitted]

print sorted(["contig1","contig20","bart30","bart03"], key = alphanumsort)