簡體   English   中英

Python,通過正則表達式查找(n)n字符串的長度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM