在fasta-fi中组合具有相似头的序列

2024-10-02 22:25:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个fasta文件,它包含如下序列:

>1 | A
actgcttctttcaa
>1 | B
cccaatggtac
>1 | C
ttccggaaa
>2 | A
actgcggcaa
>2 | B
cccaatac
>2 | C
tacatta
........
>1000 | A
actgactg
>1000 | B
aaccggttaacc
>1000 | C
ttcgttcg

我想把头上有相同数字的序列组合起来,像这样

>1
actgcttctttcaacccaatggtacttccggaaa
>2
cccaataccccaatactacatta
............
>1000
actgactgaaccggttaaccttcgttcg

现在我不知道怎么做了?有人能帮忙吗?你知道吗


Tags: 文件序列数字fastaactgactgactgcttctttcaacccaatggtacttccggaaattccggaaatacatta
1条回答
网友
1楼 · 发布于 2024-10-02 22:25:55

在Python 3中:

from collections import defaultdict

with open(input_file_name) as f:
    d = defaultdict(list)
    lines = [l.strip() for l in f.readlines()]
    lines = [l for l in lines if l]
    if len(lines) % 2:
        print("WARNING: Odd number of lines")

    for line1, line2 in zip(lines[::2], lines[1::2]):
        n, *_ = line1[1:].split('|')
        d[int(n)].append(line2.strip())

    lines = ['>{:d}\n{:s}\n'.format(k, ''.join(v)) for k, v in d.items()]

with open(output_file_name, 'w') as f:
    f.writelines(lines)

上面的代码假设对于给定的数字ID(例如,1,2,3,…),子字符串(或它们被称为的任何东西)按字母顺序(a,B,C)出现。我想说的是,例如,如果,这将不起作用

>1 | B
cccaatggtac
>1 | C
ttccggaaa
>1 | A
actgcttctttcaa

你仍然希望得到actgcttctttcaacccaatggtacttccggaaa。你知道吗

相关问题 更多 >