在python中按名称排序.txt文件

时间:2014-01-24 10:55:48

标签: python sorting blast

我有一个表格格式的巨大爆炸输出文件。我想根据蛋白质名称对数据进行排序,以查看哪种seq-s与特定蛋白质对齐。假设我有

con19 sp|Q24K02|IDE_BOVIN 3
con19 sp|P35559|IDE_RAT   2
con15 sp|Q24K02|IDE_BOVIN 8
con15 sp|P14735|IDE_HUMAN 30
con16 sp|Q24K02|IDE_BOVIN 45
con16 sp|P35559|IDE_RAT   23

我想得到一个输出,两者都可以

sp|Q24K02|IDE_BOVIN con19 3            sp|Q24K02|IDE_BOVIN con19 3
                    con15 8            sp|Q24K02|IDE_BOVIN con15 8
                    con16 45           sp|Q24K02|IDE_BOVIN con16 45
sp|P35559|IDE_RAT   con19 2            sp|P35559|IDE_RAT   con19 2          
                    con16 23           sp|P35559|IDE_RAT   con16 23
sp|P14735|IDE_HUMAN con15 30           sp|P14735|IDE_HUMAN con15 30



f1 = open('file.txt','r')
lines=f1.readlines()
for line in lines:
    a=sorted(lines)
    r=open('file.txt','w')
    r.writelines(a)
f1.close       

2 个答案:

答案 0 :(得分:2)

你需要对中间元素进行排序,只需对行本身进行排序将按字母顺序排序,即在第一个元素上进行排序。试试这个:

with open('infile.txt') as f_in, open('outfile.txt', 'w') as f_out:
    f_out.write(''.join(sorted(f_in, key=lambda x: x.split()[1:2])))

答案 1 :(得分:2)

问题是你为每一行(即在循环内)调用一次,而不是为整个行调整。试试这个:

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