美文网首页
以gaps为线索提取序列,想到如何面向对象编程

以gaps为线索提取序列,想到如何面向对象编程

作者: qizhengyang | 来源:发表于2019-04-04 10:36 被阅读0次

    定义函数
    面向过程和面向对象都会定义函数
    我这个是面向过程的,先定义一个函数,然后用这个函数提取信息

    如何要面向对象,应该怎么做?
    这个对象是谁?
    序列,这个对象拥有序列的属性
    allgaps,print_seq都是方法
    参考

    # date: 2019-4-2 11:02:33
    # qizhengyang17@gmail.com
    # 从blast XML 提取的比对序列,根据gap的位置提取需要设计引物的序列
    
    
    # grep '\(<Hsp_qseq>\|<Hsp_hseq>\)' XXX.xml |sed 's/^ *//' | sed "s/<[^>]*>//g" > seq2.txt
    
    
    def allgaps(seq):
        """返回一个列表,gap的位置信息和长度存以元组的形式存在列表里。
        输入的seq是字符串"""
        gaps = []
        indash = False
        for i, c in enumerate(seq):
            if indash is False and c == '-':
                c_ini = i
                indash = True
                dashn = 0
            elif indash is True and c == '-':
                dashn += 1
            elif indash is True and c != '-':
                indash = False
                gaps.append((c_ini, dashn+1))
        return gaps
    
    
    p = []  # 存放坐标信息,二元列表
    # [[(2147, 9), (8502, 8)], [(4018, 6), (6992, 1)]]
    
    f = open('seq2.txt', 'r')
    a = f.readlines()
    for i in range(len(a)):
        p.append(allgaps(a[i]))
    
    
    s = []  # 存放序列信息
    for i in range(len(p)):
        print(i)
        for j in range(len(p[i])):  # t 坐标
            start = p[i][j][0] - 300
            stop = p[i][j][0] + p[i][j][1] + 299
            seq = a[i][start:stop]
            s.append(seq)
    
    f = open('gaps.txt', 'w')
    for i in s:
        f.write(i+'\n')
    f.close()
    
    # 需要改进的地方:
    # 过滤掉长度短的gaps
    # 合并距离近的gap
    # 输出包含序列名和位置信息
    

    相关文章

      网友评论

          本文标题:以gaps为线索提取序列,想到如何面向对象编程

          本文链接:https://www.haomeiwen.com/subject/vkffiqtx.html