繁体   English   中英

在2个文件的文本中查找常见项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM