我有一个表格格式的巨大爆炸输出文件。我想根据蛋白质名称对数据进行排序,以查看哪种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
答案 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