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

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

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

# date: 2019-4-2 11:02:33
# [email protected]
# 从blast XML 提取的比对序列,根据gap的位置提取需要设计引物的序列


# grep '\(\|\)' 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为线索提取序列,想到如何面向对象编程)