У меня есть следующий FASTA файл, original.fasta
:Изменение идентификатора записи в файл FASTA с помощью BioPython
>foo
GCTCACACATAGTTGATGCAGATGTTGAATTCACTATGAGGTGGGAGGATGTAGGGCCA
Мне нужно изменить идентификатор записи из foo
в bar
, поэтому я написал следующий код:
from Bio import SeqIO
original_file = r"path\to\original.fasta"
corrected_file = r"path\to\corrected.fasta"
with open(original_file) as original, open(corrected_file, 'w') as corrected:
records = SeqIO.parse(original_file, 'fasta')
for record in records:
print record.id # prints 'foo'
if record.id == 'foo':
record.id = 'bar'
print record.id # prints 'bar' as expected
SeqIO.write(record, corrected, 'fasta')
Мы напечатали идентификатор записи до и после изменения и получили ожидаемый результат. Мы даже можем перепроверить, прочитав в исправленном файле снова BioPython и распечатав Индентификационный:
with open(corrected_file) as corrected:
for record in SeqIO.parse(corrected, 'fasta'):
print record.id # prints 'bar', as expected
Однако, если мы открываем исправленный файл в текстовом редакторе, мы видим, что идентификатор записи не bar
но bar foo
:
>bar foo
GCTCACACATAGTTGATGCAGATGTTGAATTCACTATGAGGTGGGAGGATGTAGGGCCA
мы можем подтвердить, что это то, что написано в файл, если мы читаем файл, используя простой Python:
with open(corrected_file) as corrected:
print corrected.readlines()[0][1:] # prints 'bar foo'
Это ошибка в BioPython? А если нет, что я сделал неправильно и как мне изменить идентификатор записи в файле FASTA с помощью BioPython?
FASTA писатель печатает Seq.ID и seq.name, если они различны. Вам нужно будет изменить оба, если вы хотите напечатать только «бар». – heathobrien
'record.description' содержит' foo' .... –
Я нашел это «если вы измените только описание, то файл fasta содержит старую id, а затем новое описание. Если и старый идентификатор, и затем новое описание будут изменены одинаково, тогда вы получите тот эффект, который вы хотите ». in (https://www.biostars.org/p/95095/) –