如何解决如果将 fasta 序列拆分为 2 个或更多记录,如何合并它?
我正在处理 fasta
文件,其中一个序列似乎被拆分为 2 个独立的实体。
例如:
>SRR6026797.1.1 1 length=251
GGAGTGCCAGCAGCCGCGGTAATACGTAGGTGGCGAGCGTTGTCCGGAATCACTGGGCGTAAAGGGCGCGCAGGCGGCGTGTCAAGTCGGACGTGAAAACCCCTGGCTCAACTGGGGGATGTCGTTCGAAACTGGCATGCTTGAGTGCAGGAGAGGGAAGCGGAATTCCCGGTGTAGCGGTGAAATGCGTAGATATCGGGAGGAACACCAGTGGCGAAGGCGGCTTCCTGGACTGTAACTGACGCTGAGGC
>SRR6026797.1.2 1 length=251
CCGGGAGGACTACAGCGGTATCTAATCCTGTTCGCTACCCACGCTTTCGTGCCTCAGCGTCAGTTACAGTCCAGGAAGCCGCCTTCGCCACTGGTGTTCCTCCCGATATCTACGCATTTCACCGCTACACCGGGAATTCCGCTTCCCTCTCCTGCACTCAAGCATGCCAGTTTCGAACGCCATCCCCCAGTTGAGCCAGGGGTTTTCACGTCCGACTTGACACGCCGCCTGCGCGCCCTTTACGCCCACTC
>SRR6026797.2.1 2 length=251
GGAGTGCCAGCAGCCGCGGTAACACGTAGGGGGCAAGCGTTGTCCGGAATCACTGGGCGTAAAGGGTGCGTAGGCGGTATGTCAAGTCAGGTGTGAAACCCCATGGCTTAACTGTGGGCTTGCACATGAAACTGGCATGCTTGAGTGCAGGAGAGGAAAGCGGAATTCCTAGTGTAGCGGTGAAATGCGTAGATATTAGGAGGAACACCAGTGGCGAAGGCGACTTTCTGGACTGACCCTGACGCTGATGT
>SRR6026797.2.2 2 length=251
CCGGGAGGACTACAAGGGTATCTAATCCTGTTTGCTCCCCACGCTTTCGCACATCAGCGTCAGGGTCAGTCCAGAAAGTCGCCTTCGCCACTGGTGTTCCTCCTAATATCTACGCATTTCACCGCTACACTAGGAATTCCGCTTTCCTCTCCTGCACTCAAGCATGCCAGTTTCATGTGCAAGCCCACAGTTAAGCCATGGGGTTTCACACCTGACTTGACATACCGCCTACGCACCCTTTACGCCCAGTG
但是,它应该合并为:
>SRR6026797.1 1 length=502
GGAGTGCCAGCAGCCGCGGTAATACGTAGGTGGCGAGCGTTGTCCGGAATCACTGGGCGTAAAGGGCGCGCAGGCGGCGTGTCAAGTCGGACGTGAAAACCCCTGGCTCAACTGGGGGATGTCGTTCGAAACTGGCATGCTTGAGTGCAGGAGAGGGAAGCGGAATTCCCGGTGTAGCGGTGAAATGCGTAGATATCGGGAGGAACACCAGTGGCGAAGGCGGCTTCCTGGACTGTAACTGACGCTGAGGCCCGGGAGGACTACAGCGGTATCTAATCCTGTTCGCTACCCACGCTTTCGTGCCTCAGCGTCAGTTACAGTCCAGGAAGCCGCCTTCGCCACTGGTGTTCCTCCCGATATCTACGCATTTCACCGCTACACCGGGAATTCCGCTTCCCTCTCCTGCACTCAAGCATGCCAGTTTCGAACGCCATCCCCCAGTTGAGCCAGGGGTTTTCACGTCCGACTTGACACGCCGCCTGCGCGCCCTTTACGCCCACTC
>SRR6026797.2 2 length=502
GGAGTGCCAGCAGCCGCGGTAACACGTAGGGGGCAAGCGTTGTCCGGAATCACTGGGCGTAAAGGGTGCGTAGGCGGTATGTCAAGTCAGGTGTGAAACCCCATGGCTTAACTGTGGGCTTGCACATGAAACTGGCATGCTTGAGTGCAGGAGAGGAAAGCGGAATTCCTAGTGTAGCGGTGAAATGCGTAGATATTAGGAGGAACACCAGTGGCGAAGGCGACTTTCTGGACTGACCCTGACGCTGATGTCCGGGAGGACTACAAGGGTATCTAATCCTGTTTGCTCCCCACGCTTTCGCACATCAGCGTCAGGGTCAGTCCAGAAAGTCGCCTTCGCCACTGGTGTTCCTCCTAATATCTACGCATTTCACCGCTACACTAGGAATTCCGCTTTCCTCTCCTGCACTCAAGCATGCCAGTTTCATGTGCAAGCCCACAGTTAAGCCATGGGGTTTCACACCTGACTTGACATACCGCCTACGCACCCTTTACGCCCAGTG
我想知道,生成具有合并序列的输出文件的正确方法是什么(可能使用 biopython
)
我目前的解决方法是:
#!/usr/bin/python3
import os
from Bio import SeqIO
# pip install biopython
from collections import defaultdict
current_folder = os.path.dirname(__file__)
input_file = os.path.join(current_folder,"input.fasta")
output_file = os.path.join(current_folder,"output.fasta")
records = SeqIO.parse(input_file,"fasta")
records_map = defaultdict(str)
for record in records:
# kicking out from the end ".1" or ".2" in sequence name
proper_record_name = ".".join(record.name.split(".")[:-1])
# if such record exists,expend existing,otherwise : create the new one
records_map[proper_record_name] += str(record.seq)
with open(output_file,"w") as writer:
for key in records_map:
# placeholders based on template from original file and fixed information on the length
writer.write(f">{key} {key.split('.')[-1]} length={len(records_map[key])}\n")
# write the glued sequence
writer.write(f"{records_map[key]} \n")
它有效,但我不喜欢将此类数据处理为原始文本(不确定 input_file
中的序列是否正确排序/组织)。有没有更好的办法?
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。