我有一个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
现在我不知道怎么做?有没有人可以帮忙解决这个问题?
答案 0 :(得分:0)
在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)。我想说的是,这不会起作用 if ,例如,
>1 | B
cccaatggtac
>1 | C
ttccggaaa
>1 | A
actgcttctttcaa
并且您希望仍然获得actgcttctttcaacccaatggtacttccggaaa
。