首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于单独文件中的条目从FASTA文件中提取序列

基于单独文件中的条目从FASTA文件中提取序列
EN

Stack Overflow用户
提问于 2013-03-12 10:24:33
回答 1查看 10K关注 0票数 1

我有两份文件。

文件1:包含基因序列的FASTA文件,格式如下:

代码语言:javascript
复制
>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:一个简单的文本文件,其中只包含基因的登录号。就像这样。

代码语言:javascript
复制
PITG_00003
PITG_00005
PITG_00023

文件2中的每个条目都在文件1中的某个位置,但并不是文件1中的每个条目都在文件2中。我需要删除文件1中不在文件2中的所有条目。我觉得在biopython模块中一定有什么东西可以帮助我,我只是不知道是什么。例如,我最初认为我可以使用SeqIO.parse函数从我的FASTA文件中提取访问,但这实际上只为我提供了两个访问编号文件。我不知道如何有选择地提取其他文件中的访问。也许像读取所有的词条从文件2到一个字典,然后关联该词条与其匹配的词条在文件1,并使用SeqIO.parse提取整个sequence...But我真的不know....Any任何人能给我的帮助是非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-12 10:48:22

试试这个:

代码语言:javascript
复制
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中的每个访问ID创建一个条目,其中键是访问ID,值设置为1(在这种情况下,值并不重要)。

接下来,我们查看文件1,并再次查看该文件中的每一行。如果文件中的行以>开头,那么我们知道它包含一个访问ID。我们取该行并沿着|拆分它,因为每个具有访问ID的行在字符串中都有一个|。接下来,取_splitline[0]指定的拆分的第一部分。我们使用accessorIDWithArrow[1:-1]来截断字符串中的第一个和最后一个字符,即前面的>符号和后面的空格。

此时,accessorID现在包含了我们期望从File2中获得的格式的访问ID。

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

对于在字典中找不到的来自文件1的的访问ID (不在文件2中),我们不将该行写入fasta_parsed.txt,并且我们将skip标志设置为0。因此,在文件1中找到存在于文件2中的另一个访问ID之前,所有后续行都将被跳过。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15352219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档