Biopython使用re.search()对基因组tRNA序列进行分类

时间:2014-07-11 20:06:26

标签: python biopython

使用Biopython为tRNA导入fasta格式的基因组序列,我正在编写这个搜索脚本;当我在这里下载的文件中搜索“AT”时:http://gtrnadb.ucsc.edu/Hsapi19/hg19-tRNAs.fa;返回626项结果中的622项。在我想要排除的4个搜索中,'AT'序列确实存在于tRNA 54中(如下所示)。为什么re.search()没有将此结果包含在622中?我不确定我是否误用了re.search()或字符串太长了? “AT”可以按照此处所述的顺序出现在字符串中的任何内容:https://docs.python.org/2/library/re.html

    #!/usr/bin/env python                                                                                                                                                                                                                
    import sys                                                                                                                                                                                                                           
    import os                                                                                                                                                                                                                            
    import time                                                                                                                                                                                                                          
    import re                                                                                                                                                                                                                            


    from Bio import SeqIO                                                                                                                                                                                                                

    filename = 'hg19-tRNAs270.fa'                                                                                                                                                                                                        
    search_seq = sys.argv[1]                                                                                                                                                                                                             

    count = 0                                                                                                                                                                                                                            
    fails = 0                                                                                                                                                                                                                            
    finds = 0                                                                                                                                                                                                                            

    output_handle = open("output_%s.fasta" % search_seq, "w")                                                                                                                                                                            

    for record in SeqIO.parse(filename, "fasta"):                                                                                                                                                                                        
        count += 1                                                                                                                                                                                                                       

        # print("Record " + record.id + ", length " + str(len(record.seq)))                                                                                                                                                              
        # print record                                                                                                                                                                                                                   
        # print 'ID:',record.id                                                                                                                                                                                                          
        # print 'SEQ:',record.seq                                                                                                                                                                                                        
        # print 'DESC:',record.description                                                                                                                                                                                               
        # print 'LENGTH:',str(len(record.seq))                                                                                                                                                                                           

        str_record = record.format("fasta")                                                                                                                                                                                              
        result = re.search(search_seq,str_record)                                                                                                                                                                                        


        if result != None:                                                                                                                                                                                                               
            finds +=1                                                                                                                                                                                                                    
            SeqIO.write(record, output_handle, "fasta")                                                                                                                                                                                  
        else:                                                                                                                                                                                                                            
            print 'ID:',record.id                                                                                                                                                                                                        
            print 'SEQ:',record.seq                                                                                                                                                                                                      
            print 'DESC:',record.description                                                                                                                                                                                             
            print 'LENGTH:',str(len(record.seq))                                                                                                                                                                                         


    output_handle.close()                                                                                                                                                                                                                
    print("There were " + str(count) + " records in file " + filename)                                                                                                                                                                   
    print("There were " + str(finds) + " matches in the file " + filename + " for sequence: " + (search_seq))

- - 模式:编译; default-directory:“〜/ Dropbox / shared /” - -
编译于7月11日星期五15:35:06开始

./ fasta_search.py​​ AT ID:complimentry_to_oligo_probe
SEQ:
DESC:complimentry_to_oligo_probe TCAGTTGGTAGAGCGGAGGA
长度:0
ID:Homo_sapiens_chr1.trna25-AsnGTT
SEQ:GTCTCTGTGGCGTAGTCGGTTAGCGCGTTCGGCTGTTAACCGAAAAGTTGGTGGTTCGAGCCCACCCAGGAACG
DESC:Homo_sapiens_chr1.trna25-AsnGTT(148000805-148000878)Asn(GTT)74 bp Sc:72.61
长度:74
ID:Homo_sapiens_chr19.trna12-GlnTTG
SEQ:AGCAGTGTAGCCTAGTGGCTAGGTCCTCTGACTTTGAAACCACGTGGTCTGGGTTTAAGTCTCAGCTGTGCTA
DESC:Homo_sapiens_chr19.trna12-GlnTTG(9150428-9150356)Gln(TTG)73 bp Sc:23.15
长度:73
ID:Homo_sapiens_chr6.trna54-ThrCGT
SEQ:GGCCCTGTAGCTCAGCGGTTGGAGCGCTGGTCTCGTAAACCTAGGGGTCGTGAGTTCAA * AT * CTCACCAGGGCCT
DESC:Homo_sapiens_chr6.trna54-ThrCGT(27586135-27586208)Thr(CGT)74 bp Sc:63.29
长度:74
文件hg19-tRNAs270.fa中有626条记录 文件hg19-tRNAs270.fa中有622个匹配序列:AT

编译于7月11日星期五15:35:06完成

2 个答案:

答案 0 :(得分:0)

这可能是换行符。 FASTA记录通常限制为每行60个字符(或者网络告诉我),因此如果格式调用将匹配部分转换为A\nT,则它与正则表达式不匹配。请改用str_record = str(record.seq)(假设您确实只想搜索序列)。

答案 1 :(得分:0)

更改

result = re.search(search_seq,str_record)   

result = re.search(search_seq,str_record, re.MULTILINE)

我的猜测是record.format()为你的str_record字符串添加换行符。