2015-05-13 4 views
0

Я сделал текстовый файл, содержащий случайные последовательности оснований (ATCG), и хочу найти самый длинный и самый короткий «кадр чтения» в этих последовательностях.Python - количество символов между двумя конкретными строками

Я смог идентифицировать начальные и стоп-коды (упомянутые две конкретные строки) с помощью «searchfile» и for-loop, а также знать основы подсчета (пример кода в конце), но Я не могу найти никакой возможности установить эти два как «границы», между которыми я могу рассчитывать.

Может кто-нибудь, может быть, дать мне подсказку или рассказать мне, как называется такая функция/операция, чтобы я мог хотя бы найти ее в документальном фильме или как это могло бы выглядеть? Я нашел много вариантов, как считать разные вещи, но нет для подсчета между «х» и «у».

Пример того, как я посмотрел строки, между которыми я хочу считать:

searchfile = open('dna.txt', 'r') 
for line in searchfile: 
    if "ATG" in line: print (line) 
searchfile.close() 

весь код:

import numpy as np 

BASES = ('A', 'C', 'T', 'G') 
P = (0.25, 0.25, 0.25, 0.25) 

def random_dna_sequence(length): 
    return ''.join(np.random.choice(BASES, p=P) for _ in range(length)) 

with open('dna.txt', 'w+') as txtout: 
    for _ in range(10): 
     dna = random_dna_sequence(50) 
     txtout.write(dna) 
     txtout.write("\n") 


searchfile = open('dna.txt', 'r') 
for line in searchfile: 
    if "ATG" in line: print (line) 
searchfile.close() 

searchfile = open('dna.txt', 'r') 
for line in searchfile: 
    if "ATG" in line: print (line) 
    elif "TAG" in line: print (line) 
    elif "TAA" in line: print (line) 
    elif "TGA" in line: print (line) 
    else: print ("no stop-codon detected") 
searchfile.close() 

Sidenote: Инструкция печати является лишь временным заполнителем для тестирования. В конце я хотел бы установить найденные строки как упомянутые «границы» (я не могу найти лучшего имени для этого) в этой точке.

Некоторые примеры строк из файла dna.txt:

GAAGACGCAATAGGTTCACGGCGCTCATAGGCTTGCCCTCATAGGGCTTG 
TCTGAGGTAGAAGGAGCTACTGCCGTTGCAGGTGACGCCCACAGTCCTGA 
GTTATTACTCCCTGACTGTCATCTGTTCGGATACCGTGCAGCGCATCGAG 
AGGAGATAACGCGATCCTGAGACAGTTTACCTATATGTTCACTACGCATG 
CCGAGCTGATCCGACTACTGAAGGTGAATTCTGAAGCTAATCTGCAGTTC 

Это небольшой пример (я использую 10 и 50 для тестирования), но в конце концов, файл должен содержать 10000 последовательностей с 1000 символов.

+0

Можете ли вы дать часть своего ввода и ожидаемого вывода – Ajay

+0

Что вы подразумеваете под словами «вход и ожидаемый результат "? Я отредактирую весь код в начальный пост, возможно, он уточнит хотя бы что-то. – grindbert

+0

опубликуйте некоторые строки из dna.txt – Ajay

ответ

1

Что я хотел бы сделать что-то вроде этого:

with open("dna.txt", 'r') as searchfile: 
    all_dna = searchfile.read() 
    start = all_dna.index("ATG") 
    rem_dna = all_dna[start + 3:] 
    end = rem_dna.index("ATG") 
    needed_dna = all_dna[start:(end + 3)] 
print len(needed_dna) 

index находок, где в строке прошла подстрока, как это происходит споры, и будет raise ValueError, если подстрока не найдена. with - ключевое слово, полезное в качестве меры предосторожности для ввода-вывода файлов, которое гарантирует, что файл будет правильно закрыт, даже если код внутри этого блока вызывает ошибку. Если вы не хотите включать начальный и конечный «ATG» в needed_dna, вы можете установить его на all_dna[(start + 3):end]. Скобки, между прочим, означают «взять подстроку указанной строки, начинающуюся с аргумента перед двоеточием (включительно, с нулевой индексацией) и заканчивая аргументом после двоеточия (не включительно, также с нулевой индексацией). также можно использовать для списков, и их можно использовать без двоеточия, чтобы получить символ по определенному индексу. Надеюсь, это поможет!

+0

он действительно. много. благодаря! – grindbert

Смежные вопросы