[英]Find common items in 2 file text
向您介绍我的问题的背景:我有两个文件,其中包含有关基因的信息:
pos.bed包含特定基因的位置,hg19-genes.txt包含该物种的所有现有基因,并带有一些指示的字符,例如基因的位置(开始和结束),名称,符号等。
问题在于,在pos中仅指示基因的位置,而未指示其名称/符号。 我想通读两个文件,并比较每行的开始和结束。 如果有匹配项,我想获取相应基因的符号。
我写了这个小python代码:
pos=open('C:/Users/Claire/Desktop/Arithmetics/pos.bed','r')
gen=open('C:/Users/Claire/Desktop/Arithmetics/hg19-genes.txt','r')
for row in pos:
row=row.split()
start=row[11]
end=row[12]
for row2 in gen:
row2=row2.split()
start2=row2[3]
end2=row2[4]
sym=row2[10]
if start==start2 and end==end2:
print sym
pos.close()
gen.close()
但是似乎这只是逐行比较两个文件(就像文件pos中的第2行与file gen中的第2行一样),因此我尝试将else添加到if循环中,但收到错误消息:
else:
gen.next()
StopIteration Traceback (most recent call last)
<ipython-input-9-a309fdca7035> in <module>()
14 print sym
15 else:
---> 16 gen.next()
17
18 pos.close()
StopIteration:
我知道可以通过以下操作比较2个文件的所有行,无论行的位置如何:
same = set(file1).intersection(file2)
但是在我的情况下,我只想比较每行的某些列,因为这些行在每个文件中具有不同的信息(开始和结束除外)。 有没有类似的方法可以比较文件中的行,但仅用于某些指定的项目?
gen
是一个迭代器,它只在文件的各行上迭代一次,即在处理pos
的第一row
。 最简单的解决方法是在外部循环中打开gen
文件:
pos=open('C:/Users/Claire/Desktop/Arithmetics/pos.bed','r')
for row in pos:
row=row.split()
start=row[11]
end=row[12]
gen=open('C:/Users/Claire/Desktop/Arithmetics/hg19-genes.txt','r')
for row2 in gen:
row2=row2.split()
start2=row2[3]
end2=row2[4]
sym=row2[10]
if start==start2 and end==end2:
print sym
gen.close()
pos.close()
另一个选择是将gen
所有行读入一个列表并在内部循环中使用该列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.