Пишите несколько записей в фасте, используя scikit-bio write
Я пытаюсь прочитать записи файла FASTA, используя scikit-bio, а затем записать определенные записи обратно в другой файл, если он удовлетворяет некоторым требованиям. Проблема, с которой я сталкиваюсь, заключается в том, что .write
методы, кажется, открывают и закрывают файл, поэтому каждая запись перезаписывает предыдущую.
In [39]: f = 'seqs.fna'
seqs = skbio.io.read(f, format='fasta')
for seq in seqs:
if seq.metadata['id'] in ['47P50SDHBQ1PA_0', '4OZ9UI889OL5V_1', '2EC8VWHQD1LW5_2']:
print('True')
seq.write('foo.txt')
True
True
Я надеюсь, что в этом случае две записи будут написаны foo.txt
однако присутствует только последняя запись. Как я могу записать все последовательности, соответствующие моим критериям, в файл?
1 ответ
Решение
Запишите в тот же открытый файл вместо указания пути к файлу:
with open('output.fna', 'w') as output_fh:
for seq in skbio.io.read('seqs.fna', format='fasta'):
if seq.metadata['id'] in ['47P50SDHBQ1PA_0', '4OZ9UI889OL5V_1', '2EC8VWHQD1LW5_2']:
seq.write(output_fh)
В качестве альтернативы вы можете использовать skbio.io.write
написать генератор последовательностей:
def filtered_seqs():
for seq in skbio.io.read('seqs.fna', format='fasta'):
if seq.metadata['id'] in ['47P50SDHBQ1PA_0', '4OZ9UI889OL5V_1', '2EC8VWHQD1LW5_2']:
yield seq
skbio.io.write(filtered_seqs(), format='fasta', into='output.fna')