Python 从一个大的fasta文件中提取特定的fasta序列

Python 从一个大的fasta文件中提取特定的fasta序列,python,biopython,Python,Biopython,我想使用下面的脚本从一个大的fasta文件中提取特定的fasta序列,但是输出是空的 transcripts.txt文件包含要从assembly.fasta导出到selected\u transcripts.fasta的列表转录本ID(ID和序列)。 例如: transcripts.txt: Transcript_00004|5601 Transcript_00005|5352 根据你的例子,有几个小问题可以解释为什么你什么也得不到。您的transcripts.txt在一行中有多个条目,因此my

我想使用下面的脚本从一个大的fasta文件中提取特定的fasta序列,但是输出是空的

transcripts.txt
文件包含要从
assembly.fasta
导出到
selected\u transcripts.fasta的列表转录本ID(ID和序列)。
例如:

  • transcripts.txt: Transcript_00004|5601 Transcript_00005|5352
    根据你的例子,有几个小问题可以解释为什么你什么也得不到。您的
    transcripts.txt
    在一行中有多个条目,因此
    my_list
    将在
    my_line[0]
    中包含第一行的所有项目,在您的循环中,您逐行迭代
    my_list
    ,因此您的第一项将是

    另外,如果
    assembly.fasta
    在标题行中没有
    ,则不会返回任何带有ID和序列的记录。假设您在标题中添加了
    ,并且
    split
    函数现在使用的是空格而不是冒号,那么下面的代码应该解决这些问题

    from Bio import SeqIO
    
    my_list = []
    with open("transcripts.txt") as transcripts:
        for line in transcripts:
            my_list.extend(line.split(' '))
    
    fin = open('assembly.fasta', 'r')
    fout = open('selected_transcripts.fasta', 'w')
    
    for record in SeqIO.parse(fin,'fasta'):
        for item in my_list:
            if item.strip() == record.id:
                fout.write(">" + record.id + "\n")
                fout.write(record.seq + "\n")
    
    
    fin.close()
    fout.close()
    

    转录本的读取已更改,以便将所有ID分别附加到
    my\u列表中。此外,为了避免与
    记录.id

    进行比较时字符串中出现换行符,每个项目都会被删除空白,请查看您的问题,并包括一些
    transcripts.txt
    以及一部分
    汇编.fasta
    ,这样我们就有了一些数据要处理了?您可以在之后拆分您的成绩单吗每一个冒号,但它是分隔的空间。这是故意的吗?您的示例FASTA文件的标题行中没有>。对不起,在trascripts.txt中,每个ID都是文件的一行。因此,示例中的第一个转录本在第1条车道上,第二个转录本在第2条车道上,依此类推。
    from Bio import SeqIO
    
    my_list = [line.split(',') for line in open("/home/universita/transcripts.txt")]
    
    fin = open('/home/universita/assembly.fasta', 'r')
    fout = open('/home/universita/selected_transcripts.fasta', 'w')
    
    for record in SeqIO.parse(fin,'fasta'):
        for item in my_list:
            if item == record.id:
                fout.write(">" + record.id + "\n")
                fout.write(record.seq + "\n")
    
    fin.close()
    fout.close()
    
    from Bio import SeqIO
    
    my_list = []
    with open("transcripts.txt") as transcripts:
        for line in transcripts:
            my_list.extend(line.split(' '))
    
    fin = open('assembly.fasta', 'r')
    fout = open('selected_transcripts.fasta', 'w')
    
    for record in SeqIO.parse(fin,'fasta'):
        for item in my_list:
            if item.strip() == record.id:
                fout.write(">" + record.id + "\n")
                fout.write(record.seq + "\n")
    
    
    fin.close()
    fout.close()