[英]Python, find the length of the (n)n string by regex
我有一個看起來像這樣的代碼:
import HTSeq
reference = open('genome.fa','r')
sequences = dict( (s.name, s) for s in HTSeq.FastaReader(reference))
out = open('homopolymers_in_ref','w')
def find_all(a_str,sub):
start = 0
while True:
start = a_str.find(sub, start)
if start == -1: return
yield start
start += len(sub)
homa = 'AAAAAAAAAA'
homc = 'CCCCCCCCCC'
homg = 'GGGGGGGGGG'
homt = 'TTTTTTTTTT'
for key,line in sequences.items():
seq = str(line)
a= list(find_all(seq,homa))
c = list(find_all(seq,homc))
g = list(find_all(seq,homg))
t = list(find_all(seq,homt))
for i in a:
## print i,key,'A'
out.write(str(i)+'\t'+str(key)+'\t'+'A'+'\n')
for i in c:
out.write(str(i)+'\t'+str(key)+'\t'+'C'+'\n')
## print i,key,'C'
for i in g:
out.write(str(i)+'\t'+str(key)+'\t'+'G'+'\n')
for i in t:
out.write(str(i)+'\t'+str(key)+'\t'+'T'+'\n')
out.close()
我用HTSeq打開參考。 它的作用-尋找長度為10的簡單均聚物,並輸出起始位置,染色體和類型(A,C,T,G,)。
該序列始終看起來像:ACCGCTACGATCGATCGAAAAAAAAAAAAAAAAAAAAACGATCGAC有時它包含N
因此我們要尋找的均聚物是:AAAAAAAAAA(或其他僅由C,G,T組成的)
基本上,您的幫助只是關於find_all函數:現在,我想更改的是找到每種均聚物的長度。 因為,現在如果均聚物的長度為15,我的腳本無法告訴它。 我當時正在考慮通過某種正則表達式來做到這一點,即:像現在一樣找到至少10 bp,並通過向其添加+1直到下一個鹼基與均聚物中的鹼基不一樣來計算長度。
關於如何使用正則表達式在python中做任何建議?
如果您想使用正則表達式執行此操作,則可以嘗試以下操作:
>>> import re
>>> seq = 'ACCGCTACGATCGATCGAAAAAAAAAAAAAAAAAACGATCGAC'
>>>
>>> [(m.group(), m.start())
... for m in re.finditer(r'([ACGT])\1{9,}', seq)
... if len(m.group()) >= 10]
[('AAAAAAAAAAAAAAAAAA', 17)]
這將生成一個(sequence, start_index)
元組的列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.