Я использую скрипт Python, который ищет шаблон в файле fasta. Он работает очень хорошо, но не возвращает перекрывающиеся строки. К сожалению, меня интересуют возможные перекрывающиеся строки. Поскольку я не программист (я просто пытаюсь изучить Python), мне было интересно, может ли кто-нибудь изменить скрипт, чтобы найти перекрывающиеся строки. Я думаю, что модуль регулярных выражений может это сделать, но я безуспешно пытался установить его на свой компьютер (Windows). Я получил это:
C:\Python33>regex-2014.02.19>python setup.py install
running install
running build
running build_py
runnning built_ext
building'_regex' extension
error:Unable to find vcvarsall.bat
Мне было бы проще работать с модифицированным скриптом. Итак, вот мой сценарий:
import re
import sys
psq_re_f= re.compile('G{3,}.{1,7}?G{3,}.{1,7}?G{3,}.{1,7}?G{3,}') #((?<=G)[^G]|(?<!G).)
psq_re_r= re.compile('C{3,}.{1,7}?C{3,}.{1,7}?C{3,}.{1,7}?C{3,}') #((?<=C)[^C]|(?<!C).)
filename = input('Enter the name of the input fasta file: ')
ref_seq_fh = open(filename)
outputfileg = open("strelkaindels_quadg.txt",'wt')
outputfilec = open("strelkaindels_quadc.txt",'wt')
outputfileg.write('#\tID\tEntry Length\tStart\tEnd\tLength\tStrand\tSequence\n')
outputfilec.write('#\tID\tEntry Length\tStart\tEnd\tLength\tStrand\tSequence\n')
count = 0
ref_seq = []
line = (ref_seq_fh.readline()).strip()
chr = re.sub('^>', '', line)
chr1 = chr.split (":")
#line = (ref_seq_fh.readline()).strip()
while True:
while line.startswith('>') is False:
ref_seq.append(line)
line = (ref_seq_fh.readline()).strip()
if line == '':
break
ref_seq = ''.join(ref_seq)
for m in re.finditer(psq_re_f, ref_seq):
count=count+1
outputfileg.write('%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s' %(count, chr1[0], len(ref_seq), m.start(), m.end(), len(m.group(0)), '+', m.group(0))+'\n')
for m in re.finditer(psq_re_r, ref_seq):
count=count+1
outputfilec.write('%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s' %(count, chr1[0], len(ref_seq), m.start(), m.end(), len(m.group(0)), '-', m.group(0))+'\n')
chr = re.sub('^>', '', line)
chr1 = chr.split (":")
ref_seq = []
line= (ref_seq_fh.readline()).strip()
if line == '':
break
outputfileg.close()
outputfilec.close()
Наконец, пример файла fasta (текстовый формат для представления нуклеотидных последовательностей), широко используемого в биологии:
>id_1
agatagatgatagatatagagagcgcgctagatcgatcgatcgagtcgatcgcgcggggggcccctctctctctatagggacatacga
>id_2
agacatcagatacagagatatttacataacaagagatacag
>id_3
cgctctagctcctcctctcgcgtagctagctctctctaacatgattagaattcagatcgatcgatcgatggttttttttctctct
and so on...
Например, представим следующую последовательность:
GGGTGGGTGGGCGGGAGGG
Скрипт вернет только эту строку:
GGGTGGGTGGGCGGG
Но я хотел бы также получить это:
GGGTGGGCGGGAGGG