使用Biopython替换文件之间的序列

2024-10-03 06:27:19 发布

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

我有两个蛋白质序列FASTA文件:

在nsp.法斯塔-->;原始文件

在wsp.fasta公司-->;信号肽预测工具的输出文件,该工具返回nsp.法斯塔信号消失了。在

例如:

记录在nsp.法斯塔公司名称:

>gi|564250271|ref|XP_006264203.1| PREDICTED: apolipoprotein D [Alligator mississippiensis]
MRGMLALLAALLGLLGLVEGQTFHMGQCPNPPVQEDFDPSKYLGKWYEIEKLPSGFEQER
CVQANYSLKANGKIKVLTKMVRSAQHLTCLQHRMMLLVSSPVMPASPYWVVATDYENYAL
VYSCTSFFWLFHVDYAWIRSRTPQLHPETVEHLKSVLRSYRIQTGMMLPTDQMNCPSDM

记录在wsp.fasta公司公司名称:

^{pr2}$

然而,并不是所有的蛋白质nsp.法斯塔含有一个信号肽,所以wsp.fasta公司是nsp.法斯塔包含信号的。我需要的是一个独特的文件,包含所有的蛋白质记录,既没有发现信号肽的蛋白质,也有去掉信号肽的成熟链。在

我试过以下方法:

from Bio import SeqIO

file1 = SeqIO.parse(r"c:\Users\Sergio\Desktop\nsp.fasta", "fasta")

file2 = SeqIO.parse(r"c:\Users\Sergio\Desktop\wsp.fasta", "fasta")

for seq1 in file1:
    for seq2 in file2:
        if seq2.id == seq1.id:
            seq1.seq = seq2.seq
            SeqIO.write(seq1, r"c:\Users\Sergio\Desktop\nuevsp.fasta", "fasta")

但根本没有产出。我试着把SeqIO.write公司返回一个空白文件。我做错什么了?已经有任何方法可以合并两个文件,或者用另一个文件中的序列替换一个文件中的序列?在

提前谢谢你!!在

塞尔吉奥

编辑代码后,我添加了一个elif子句,试图在中也添加记录nsp.法斯塔这不匹配wsp.fasta公司,但不起作用:

to_write = []

for seq1 in SeqIO.parse(r"c:\Users\Sergio\Desktop\nsp.txt", "fasta"):
    for seq2 in SeqIO.parse(r"c:\Users\Sergio\Desktop\wsp.txt", "fasta"):
        if seq1.id == seq2.id:
            seq1.seq = seq2.seq
            to_write.append(seq1)
        elif seq1.id != seq2.id:
            to_write.append(seq1)

SeqIO.write(to_write, r"c:\Users\Sergio\Desktop\nuevsp.txt", "fasta")

Tags: 文件id公司蛋白质usersfastawritedesktop
1条回答
网友
1楼 · 发布于 2024-10-03 06:27:19

正如你写的那样,每次你写一个新的序列,你就会覆盖上一个。尝试将记录存储在列表中,然后在循环完成后写出该列表。在

to_write = []
for seq1 in SeqIO.parse(r"c:\Users\Sergio\Desktop\nsp.fasta", "fasta"):
    for seq2 in SeqIO.parse(r"c:\Users\Sergio\Desktop\wsp.fasta", "fasta"):
        if seq2.id == seq1.id:
            seq1.seq = seq2.seq
            to_write.append(seq1)
SeqIO.write(to_write, r"c:\Users\Sergio\Desktop\nuevsp.fasta", "fasta")

编辑以建议使用列表理解的另一种方法:

^{pr2}$

编辑以解决“将记录添加到nsp.法斯塔这不匹配wsp.fasta公司“需要-一般方法,不一定是精确的代码:

ids_not_wanted = [x.id for x in SeqIO.parse(r"c:\Users\Sergio\Desktop\wsp.fasta", "fasta")]
records_to_save_2 = [x for x in SeqIO.parse(r"c:\Users\Sergio\Desktop\wsp.fasta", "fasta") if (x.id not in ids_not_wanted)]

records_to_save.append(records_to_save_2)
# If duplicate records are a problem, eliminate them using "set"
records_to_save = list(set(records_to_save))
SeqIO.write(records_to_save, r"c:\Users\Sergio\Desktop\nuevsp.fasta", "fasta")

相关问题 更多 >