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

我正在尝试比较两个multifasta文件。一种具有microRNA前体(70nt),另一种具有成熟的microRNA(22nt)。我想将成熟的microRNA与前体文件的前20 nt进行比较,如果包含序列,我希望它将成熟的ID更改为> ID_5p。到目前为止,我编写了一个脚本,该脚本给我的输出只是多次复制的成熟文件中的某些序列。你能帮我吗?

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)

xiaoyu8848 回答:比较Fasta序列与多播文件的子字符串并更改ID名称

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

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个核苷酸相同。该解决方案可能适用于其他条件。

本文链接:https://www.f2er.com/3020924.html

大家都在问