我实际上有一个这样的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例如只计算一次,即使它出现两次,我想保持juste一次。 _number_number无所谓,它们一直在变化。
对于这个例子,我将输出:序列号:4
谢谢:)
答案 0 :(得分:3)
创建一个包含标签的哈希集,扫描文件,将每个标签添加到哈希集:
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
重复项会自动删除,因为该集合始终只包含每个元素的一个副本。
我已删除了>seq
- 部分以及>seqX_Y_Z
- 标签中的数字,所以我只保留X
。如果您需要其他内容,请相应地调整label = ....
中子字符串的选择。
答案 1 :(得分:1)
如果文件内容与您指定的相同,则可以解决您的查询问题:
lst = []
with open('path/to/file', 'r') as f:
for line in f:
if line.startswith('>seq') and line[4] not in lst:
lst.append(line[4])
print(lst)
# ['A', 'B', 'C', 'D']
print(len(lst))
# 4