比较Fasta序列和多播文件的子串并更改ID名称

2024-05-23 15:26:48 发布

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

我试着比较两个multifasta文件。一个有microRNA前体(70nt),另一个有成熟microRNA(22nt)。我想将成熟的microRNA与前体文件的前20个nt进行比较,如果包含序列,我希望它将成熟文件中的ID更改为>;身份证号码。到目前为止,我写了一个脚本,给我一个输出,只是一些序列从我的成熟的文件复制了很多次。你能帮我吗

from Bio import SeqIO

for mature in SeqIO.parse("mature_microRNAs_final.txt", "fasta"):
    mature.id
    repr(mature.seq)
    len(mature)

    for precursors in SeqIO.parse("precursors_microRNAs_final.txt", "fasta"):
        precursors.id, precursors.seq, len(precursors.seq)
        precursors_5p = precursors.seq[0:20]

        for seq in mature:
            if mature.seq == precursors_5p:
                print(mature.id+"_5p" , "\n" + mature.seq)


Tags: 文件前体intxtidforparse序列
1条回答
网友
1楼 · 发布于 2024-05-23 15:26:48

这里不需要嵌套循环(这会导致重复输出),而是存储相关的前体序列并与成熟序列进行比较:

from Bio import SeqIO

precursors = {
    record.seq[:20] for record in SeqIO.parse("precursors_microRNAs_final.txt", "fasta")
}

for record in SeqIO.parse("mature_microRNAs_final.txt", "fasta"):
    if record.seq[:20] in precursors:
        record.id += "_5p"
        record.description = record.id + " " + record.description.split(" ", 1)[1]
    print(record.format("fasta"))

注意,这里我假设你只希望成熟记录的前20个核苷酸与游标前记录的前20个核苷酸相同。此解可用于其它标准

相关问题 更多 >