定义函数
面向过程和面向对象都会定义函数
我这个是面向过程的,先定义一个函数,然后用这个函数提取信息
如何要面向对象,应该怎么做?
这个对象是谁?
序列,这个对象拥有序列的属性
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
# 输出包含序列名和位置信息