Как я могу отредактировать свой скрипт на Python, чтобы он мог выделять весь текст быстрой записи? - PullRequest
0 голосов
/ 02 января 2019

У меня есть 2 файла: один представляет собой текстовый файл, который содержит серию идентификаторов, а другой - файл многофакторного ввода, который содержит последовательности фаста, соответствующие идентификаторам в первом файле.У меня есть Python скрипт, который может выбрать совпадающие идентификаторы из обоих файлов.Это выглядит так:

from Bio import SeqIO

fasta=SeqIO.parse("fasta1.fasta","fasta")
seq_dict={}

for record in fasta:
    seq_dict[record.id]=record.seq

#print (seq_dict)
for line in open("names","r"):
    line=line.strip()
    print(line)

for cle in seq_dict.keys():
    print(cle)

Мне нужно отредактировать мой скрипт, чтобы он мог выбрать текст последовательности рядом с соответствующим идентификатором.Можете ли вы помочь мне, пожалуйста, чтобы сделать это?Спасибо.

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Проверьте, работает ли это:

from Bio import SeqIO

fasta=SeqIO.parse("fasta1.fasta","fasta")
seq_dict = {}

for record in fasta:
    seq_dict[record.id.strip()] = record.seq

with open("names","r") as lines:
    for line in lines:
        l = line.strip().lstrip('<')
        if l in seq_dict:
            print(l) # ID
            print(seq_dict[l])  # sequence

Обратите внимание, что предполагается, что идентификаторы, полученные из файла fasta, совпадают с идентификаторами в файле имен. Если это не так, пожалуйста, предоставьте дополнительную информацию о том, что именно содержит каждый из двух файлов (с примерами)

0 голосов
/ 02 января 2019

Поработав немного с Bio.SeqIO, я пришел к выводу, что @Bazingaa, вероятно, правильно. Адаптировал ваш код так:

from Bio import SeqIO

fasta=SeqIO.parse("fasta1.fasta","fasta")
seq_dict={}

for record in fasta:
    seq_dict[record.id]=record.description

#print (seq_dict)
for line in open("names","r"):
    line=line.strip()
    print(line)

for cle, desc in seq_dict.items():
    print(cle)
    print(desc)                                                                                                       

Вы, кажется, новичок в Python, поэтому вот что я сделал:

  • вместо того, чтобы хранить record.seq, я сохранил record.description
  • for a, b in <some dictionary>.items() будет перебирать элементы словаря, возвращая пары ключ-значение в переменные a, b

Надеюсь, это поможет.

Edit:

Вот несколько более "питоническая" версия. Я не очень понимаю, что такое fasta, поэтому я предположил, что вы захотите прочитать строки из имен, взять часть 'tr | кое-что' в качестве идентификаторов (без начального '>') и распечатать те из 'fasta1 .fasta 'если они в именах:

from Bio import SeqIO

fasta = SeqIO.parse("fasta1.fasta","fasta")

# read all the names
with open("names", "r") as f:  # this takes care to close the file afterwards
  names = [line.strip().lstrip('>') for line in f]
print("Names: ", names)

for record in fasta:
    print("Record:", record.id)
    if record.id in names:                                                                                            
        print("Matching record:", record.id, record.seq, record.description)
0 голосов
/ 02 января 2019

Если вы хотите извлечь только элементы из файла names, возможно, более эффективно сначала прочитать имена в память.

from Bio import SeqIO

wanted = dict()
with open("names","r") as lines:
    for line in lines:
        wanted[line.strip()] = 1

for record in SeqIO.parse("fasta1.fasta","fasta"):
    if record.id in wanted:
        print(record.seq)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...