首页 > 解决方案 > 序列的计数(不重复)

问题描述

我实际上有一个这样的 multifasta 文件:

>seqA_0042_0035
AGGACCATGA
>seqB_0035_0042
ATGGATGGAGGAGATG
>seqC_0042_0035
AGGATGGAGGATAG
>seqA_0042_0035
ATGGAGAGAG
>seqD_0042_0035
ATTGGGAA
>seqC_0035_0042
ATGGGAGAGAAGA
>seqA_0042_0035

我只是想计算我有多少个序列(带有 ID 名称),但如果我有一个 seqA 例如只计算一次,即使它出现两次,我也想保留一次。_number_number 无关紧要,它们一直在变化。

对于这个例子,我将有输出:序列数:4

谢谢 :)

标签: pythonpython-3.x

解决方案


创建一个包含标签的哈希集,扫描文件,将每个标签添加到哈希集中:

set_of_labels = set()

with open("path/to/my_multi_FASTA_file") as f:
  for line in f:
    if line.startswith('>seq'):
      label = line[4:].split('_')[0]
      set_of_labels.add(label)

print(f"Number of distinct labels: {len(set_of_labels)}")

输出:

Number of distinct labels: 4

重复项会自动删除,因为该集合始终只包含每个元素的一个副本。

我已经从 -labels 中删除了>seq-part 和数字>seqX_Y_Z,所以我只保留X. 如果您想要其他内容,请相应地调整子字符串的选择label = ....


推荐阅读