问题出在你的循环中,当找到匹配的行时,你将整行添加到了字符串`st`中。然而,在GFF文件中,属性信息是以分号(;)分隔的,所以你可能会得到重复的结果。
为了解决这个问题,你可以使用split(';')方法来提取属性信息,并对每个属性进行处理。修改你的代码如下:a = open('.\\测试.txt')b = open('.\\测试1.txt')c = open('.\\数量1.txt', 'w')gff = a.readlines()cyp = b.readlines()shul = []for i in cyp: d = '' st = '' p450 = i.strip() for m in gff: if p450 in m: attrs = m.strip().split(';') # 将属性信息以分号分隔成列表 for attr in attrs: if 'exon' in attr: st += attr + '\n' d = p450 + '\t' + str(st.count('exon')/2) + '\t' + str(st.count('exon')/2-1) + '\n' shul.append(d)c.writelines(shul)a.close()b.close()c.close()
现在,`st`中只包含与'exon'相关的属性行,而不再包含其他属性行。重新运行代码,你应该会得到正确的结果。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 |