python-3.x - 使用 BioPython 修剪 fasta 文件
问题描述
我有一个包含多个序列的 fasta 文件。一些序列以'-'结尾,我想从最终序列中修剪它们。有没有一种干净的方法来修剪它们并使用 Biopython 编写一个没有破折号的新 fasta 文件?
我看到这篇文章How to remove all-N sequence entries from fasta file(s)并尝试修改一些代码,但它没有用......
包含如下序列的文件:
sequence_of_interest CAGGCCATTTCACCTAGAACTTTAAATGCATGGGTAAAAGTAGTAGAAGAGAAGGCTTTTAGCCCAGAAGTAATACCCATGTTTTCAGCATTATCAGAAGGAGCCACCCCACAAGATTTAAACACCATGCTAAACACAGTTGGGGGGACATCAAGCAGCAATGCAAATGTTAAAAGAGACCATCAATGAGGAAGCTGCAGAATGGGATAGATTGCATCCAGTGCACGCAGGGCCTATTGCACCAGGCCAGATGAGAGAGACAT ---------------
def dash_removal(file_in, file_out):
records = SeqIO.parse(file_in, 'fasta')
filtered = (rec for rec in records if any(ch != '-' for ch in rec.seq))
SeqIO.write(filtered, file_out, 'fasta')
dash_removal("dash_removal_test.fasta", "dashes_gone?.fasta")
所有的序列最终都应该被修剪成这样:
sequence_of_interest CAGGCCATTTCACCTAGAACTTTAAATGCATGGGTAAAAGTAGTAGAAGAGAAGGCTTTTAGCCCAGAAGTAATACCCATGTTTTCAGCATTATCAGAAGGAGCCACCCCACAAGATTTAAACACCATGCTAAACACAGTGGGGGGACATCAAGCAGCAATGCAAATGTTAAAAGAGACCATCAATGAGGAAGCTGCAGAATGGGATAGATTGCATCCAGTGCACGCAGGGCCTATTGCACCAGGCCAGATGAGAGAGA
任何帮助,将不胜感激!
解决方案
使用的所有选项sed
都很棒,因为它们更快,但这是一种在BioPython
.
这个想法是在每条记录rstrip
的seq
属性上使用。rstrip
可以在序列上使用,就像在 Python 中的任何其他字符串上一样。
from Bio import SeqIO
import io
seq = """>sequence_of_interest
CAGGCCATTTCACCTAGAACTTTAAATGCATGGGTAAAAGTAGTAGAAGAGAAGGCTTTTAGCCCAGAAGTAATACCCAT
GTTTTCAGCATTATCAGAAGGAGCCACCCCACAAGATTTAAACACCATGCTAAACACAGTGGGGGGACATCAAGCAGCAA
TGCAAATGTTAAAAGAGACCATCAATGAGGAAGCTGCAGAATGGGATAGATTGCATCCAGTGCACGCAGGGCCTATTGCA
CCAGGCCAGATGAGAGAA--------------------------------------------------------------"""
f = io.StringIO(seq) # replace it with f = open('my_fasta.fa', 'r')
clean_records = []
for record in SeqIO.parse(f, "fasta"):
record.seq = record.seq.rstrip('-')
clean_records.append(record)
with open('clean_fasta.fa', 'w') as f:
SeqIO.write(clean_records, f, 'fasta')
推荐阅读
- java - 将二进制改成十进制
- flutter - InputDecoration errorText 必须是常量
- reactjs - 如何在 react-bootstrap 中删除箭头工具提示
- azure - 什么是 Azure 云服务-L3
- javascript - php datetime am 或 pm 的数据表排序不正确
- java - ElasticSearch 6.2.3 与 Spring Data/Spring Batch 集成以进行索引
- java - 如何使用 Mockito 在服务内的私有方法中引发错误
- loops - 如何使用循环/递归在clojure中打印n个数字的平方和
- kotlin - requireNotNull 与确定运算符!在科特林
- sql - 生成一个行号并在 oracle 中每五个客户重复一次