根据单独文件中的条目从FASTA文件中提取序列

发布于 2021-01-29 16:12:27

我有两个文件。

文件1:带有基因序列的FASTA文件,格式如下例所示:

>PITG_00002 | Phytophthora infestans T30-4 conserved hypothetical protein (426 nt)
ATGCATCGCTCGGGTTCCGCACGGAAAGCCCAAGGTCTGGGATTACGGGGTGGTGGTCGG
TTACACTTGGAATAACCTCGCAAATTCAGAATCTCTACAGGCTACGTTCGCGGATGGAAC
>PITG_00003 | Phytophthora infestans T30-4 protein kinase (297 nt)
ATGACGGCTGGGGTCGGTACGCCCTACTGGATCGCACCGGAGATTCTTGAAGGCAAACGG
TACACTGAGCAAGCGGATATTTACTCGTTCGGAGTGGTTTTATCCGAGCTGGACACGTGC
AAGATGCCGTTCTCTGACGTCGTTACGGCAGAGGGAAAGAAACCCAAACCAGTTCAGATC
>PITG_00004 | Phytophthora infestans T30-4 protein kinase, putative (1969 nt)
ATGCGCGTGTCTGGTCTCCTTTCAATTCTTGCAGCCACTTTGACCACGGCCCAAGACTAC

文件2:一个简单的文本文件,带有基因的登录号。像这样

PITG_00003
PITG_00005
PITG_00023

文件2中的每个条目都在文件1中的某个位置,但文件1中并非每个条目都在文件2中。我需要从文件1中删除所有不在文件2中的条目。我觉得biopython中一定有东西可以帮助我的模块,我只是不知道什么。例如,我本来以为可以使用该SeqIO.parse函数从FASTA文件中仅提取出种质,但这确实使我获得了两个种质号文件。我不知道如何有选择地提取其他文件中的种质。也许就像将文件2中的所有条目读入字典中,然后将该条目与其在文件1中的匹配条目相关联并用于SeqIO.parse提取整个序列…但是我真的不知道…任何人都可以提供的帮助我非常感谢!

关注者
0
被浏览
151
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    尝试这个:

    f2 = open('accessionids.txt','r')
    f1 = open('fasta.txt','r')
    f3 = open('fasta_parsed.txt','w')
    
    AI_DICT = {}
    for line in f2:
        AI_DICT[line[:-1]] = 1
    
    skip = 0
    for line in f1:
        if line[0] == '>':
            _splitline = line.split('|')
            accessorIDWithArrow = _splitline[0]
            accessorID = accessorIDWithArrow[1:-1]
            # print accessorID
            if accessorID in AI_DICT:
                f3.write(line)
                skip = 0
            else:
                skip = 1
        else:
            if not skip:
                f3.write(line)
    
    f1.close()
    f2.close()
    f3.close()
    

    先简单介绍一下这是怎么回事......这里accessionids.txt是你的 文件2 ,而fasta.txt为你的 文件1
    。显然,您需要用代码中的实际文件名替换这些文件名。

    首先,我们创建一个字典(有时称为哈希或关联数组),并为 文件2中的 每个Accession ID创建一个条目,其中 为Accession
    ID,并且 设置为1(这并不意味着该值确实很重要)在这种情况下)。

    接下来,我们查看 文件1,
    然后再次查看该文件中的每一行。如果文件中的行以开头,>那么我们知道它包含一个登录ID。我们将这一行并沿分割,|因为每个具有Accession
    ID的行在|字符串中都会有一个。接下来,按照的指定进行分割的第一部分_splitline[0]。我们accessorIDWithArrow[1:-1]用来截断字符串中的第一个和最后一个字符,它们是>前面的符号和后面的空白。

    此时,accessorID现在包含我们希望从 文件2 获得的格式的登录ID 。

    接下来,我们检查之前创建并填充的词典是否将此访问ID定义为键。如果是这样,我们立即将具有登录ID的行写入新文件fasta_parsed.txt,并将skip‘flag’变量设置/重置为0。然后,else包含该if not skip段的语句将允许与我们发现要打印到fasta_parsed.txt文件的登录号关联的后续行。

    对于保藏ID从 文件1 不在字典中(未在发现 文件2
    ),我们没有行写入fasta_parsed.txt和我们设置skip标志为0。因此,直到另一个登录ID是在发现 文件1 中存在的
    文件2 ,所有后续行都将被跳过。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看