【问题标题】:Trim fasta files using BioPython使用 BioPython 修剪 fasta 文件
【发布时间】:2018-08-02 05:38:42
【问题描述】:

我有一个包含多个序列的 fasta 文件。一些序列以'-'结尾,我想从最终序列中修剪它们。有没有一种干净的方法来修剪它们并使用 Biopython 编写一个没有破折号的新 fasta 文件?

我看到这个帖子How to remove all-N sequence entries from fasta file(s) 并尝试修改一些代码但它没有工作......

包含如下序列的文件:

sequence_of_interest CAGGCCATTTCACCTAGAACTTTAAATGCATGGGTAAAAGTAGTAGAAGAGAAGGCTTTTAGCCCAGAAGTAATACCCATGTTTTCAGCATTATCAGAAGGAGCCACCCCACAAGATTTAAACACCATGCTAAACAACAGTGGGGGGACATCAAGCAAGCAATGCAAATGTTAAAAGAGACCATCAATGAGGAAGCTGCAGAATGGGATAGATTGCATCCAGTGCACGCAGGGCCTATTGCACCAGGCCAGATGAGAGAA----------------------------------------------------------------- --------------

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 CAGGCCATTTCACCTAGAACTTTAAATGCATGGGTAAAAGTAGTAGAAGAGAAGGCTTTTAGCCCAGAAGTAATACCCATGTTTTCAGCATTATCAGAAGGAGCCACCCCACAAGATTTAAACACCATGCTAAACAACAGTGGGGGGACATCAAGCAAGCAATGCAAATGTTAAAAGAGACCATCAATGAGGAAGCTGCAGAATGGGATAGATTGCATCCAGTGCACGCAGGGCCTATTGCACCAGGCCAGATGAGAGAA

任何帮助将不胜感激!

【问题讨论】:

  • sed -i~ 's/-*$//' *.fasta 将简单地从所有行中删除所有尾随破折号,这就足够了吗?
  • 嘿。我读了标题,并认为这是“更快地修剪文件”的俚语
  • 似乎奏效了!谢谢!
  • 如果我想在 python 中运行它,我将如何修改它?

标签: python-3.x trim biopython fasta


【解决方案1】:

使用sed 的所有选项都很棒,因为它们更快,但这是BioPython 中的一种方法。

这个想法是在每条记录的seq 属性上使用rstriprstrip 可以用于序列,就像 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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多