【问题标题】:How to trim or pad a sequence to be a certain length bio python如何将序列修剪或填充为一定长度的生物python
【发布时间】:2020-01-20 10:03:41
【问题描述】:

修剪或填充一组 biopython fastfa 文件直到它们都达到一定长度以便我可以将它们添加到多序列比对中的最简单方法是什么? BioPython AlignIO ValueError says strings must be same length? 与此处的答案类似,除了有多个序列,没有文本文件,最后它应该全部合并到一个多重序列对齐中。最终目标是使所有序列为 570 个字符。我打算将所有这些合并到一个门树中

【问题讨论】:

  • 您是否有示例和期望的结果可以帮助我们了解您的需求?
  • stackoverflow.com/questions/32833230/… 类似于此的答案,除了我需要它完成多个序列并且我不知道序列是太短还是太长。我也只使用 fastfas 而不是文本文件。
  • 而不是修剪/填充您的序列,您不应该对齐它们吗? Bio.AlignIO 用于操作已经对齐的序列,如果您想构建系统发育,它基于对齐与适当放置的间隙而不是任意填充

标签: python bioinformatics biopython


【解决方案1】:

我不熟悉 Biopython,但我知道您可以轻松地在 pysam 中通过读取 FASTA、循环遍历每个序列、将序列修剪到特定大小,然后将其写入新的 FASTA 来完成。请参见下面的示例:

from pysam import FastxFile


fasta_q_file = "INPUT.fasta"
out_filename = "OUTPUT_NAME.fasta"
size_size_trim = 50


with FastxFile(fasta_q_file) as fh, open(out_filename, mode='w') as fout:
    for entry in fh:
        sequence_id = entry.name
        sequence = entry.sequence

        if sequence > size_size_trim:
            fout.write(">{}_trimmed_to_{}_bp\n{}\n".format(size_size_trim,sequence_id, sequence[:size_size_trim]))

        else:
            if sequence == size_size_trim:
                fout.write(">{}\n{}\n".format(sequence_id, sequence[:size_size_trim]))
            else:
                # sequences shorter than `size_size_trim` are not written.
                continue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    相关资源
    最近更新 更多