【问题标题】:How to get the count of duplicated sequences in fasta file using python如何使用python获取fasta文件中重复序列的计数
【发布时间】:2019-03-18 17:29:11
【问题描述】:

我有一个这样的 fasta 文件: test_fasta.fasta

>XXKHH_1
AAAAATTTCTGGGCCCC
>YYYXXKHH_1
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>TTDTT_11
TTTGGGAATTAAACCCT
>ID_2SS
TTTGGGAATTAAACCCT
>YKHH_1
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>YKHSH_1S
TTAAAAATTTCTGGGCCCCGGGAAAAAA

我想获取重复序列的计数并附加文件中每个序列的总计数(从多到少排序)并得到如下所示的结果:

>YYYXXKHH_1_counts3
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>TTDTT_11_counts2
TTTGGGAATTAAACCCT
>XXKHH_1_counts1
AAAAATTTCTGGGCCCC

我有这段代码可以找到重复的序列并将它们的 id 连接在一起,但不是将它们连接在一起,我只希望在 id 中附加重复的计数,如结果中所示。

from Bio import SeqIO
from collections import defaultdict

dedup_records = defaultdict(list)
for record in SeqIO.parse("test_fasta.fasta", "fasta"):
    # Use the sequence as the key and then have a list of id's as the value
    dedup_records[str(record.seq)].append(record.id)
with open("Output.fasta", 'w') as output:
    for seq, ids in dedup_records.items():
        # Join the ids and write them out as the fasta
        output.write(">{}\n".format('|'.join(ids)))
        output.write(seq + "\n")

【问题讨论】:

    标签: python fasta


    【解决方案1】:

    由于您已经在输出循环中的ids 列表中获得了每个重复记录的 ID,因此您可以简单地输出第一个 ID(根据您的预期输出显然是您想要的),然后是 @ 的长度987654322@名单:

    for seq, ids in sorted(dedup_records.items(), key=lambda t: len(t[1]), reverse=True):
        output.write(">{}_counts{}\n".format(ids[0], len(ids)))
        output.write(seq + "\n")
    

    【讨论】:

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