当前位置: 首页 > 面试题库 >

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

井宪
2023-03-14
问题内容

我有两个文件。

文件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提取整个序列…但是我真的不知道…任何人都可以提供的帮助我非常感谢!


问题答案:

尝试这个:

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 ,所有后续行都将被跳过。



 类似资料:
  • 问题内容: 假设您有一个像这样的文本文件:http : //www.gutenberg.org/files/17921/17921-8.txt 有没有人有一个好的算法或开放源代码从文本文件中提取单词?如何获得所有单词,同时避免使用特殊字符,并保留诸如“ it’s”之类的内容… 我在用Java工作。谢谢 问题答案: 这听起来像是正则表达式的正确工作。如果您不知道如何开始,以下是一些Java代码,可以

  • 提取css 成单独文件需要用到mini-css-extract-plugin插件 一、提取 css 的核心配置 // webpack.config.js webpack的配置文件 // 路径: ./webpack.config.js ………… // 引入插件 const MiniCssExtractPlugin = require('mini-css-extract-plugin'); modu

  • 我试图读取一个FASTA文件,然后找到特定的motif(字符串)并打印出它出现的顺序和次数。FASTA文件只是以标题行开始的一系列序列(字符串),标题或新序列开始的签名是“” 属性错误:“str”对象没有属性“下一个” 我不确定这是怎么回事。

  • 问题内容: 我试图提取具有特定文本文件之间的文本: 然后将其转储到文本文件中,以便 谢谢您的帮助。 问题答案: 这对我来说足够好了。您的样本数据在一个名为“ data.txt”的文件中,输出将进入“ result.txt”

  • 问题内容: 我有一个包含以下各列的csv文件: 身份证,姓名,年龄,性别 接下来是以上各列的很多值。我试图单独读取列名称,并将其放在列表中。 我正在使用Dictreader,它给出了正确的细节: 但是我想做的是,我需要使用输入csv自动解析列列表(在上述情况下为“ i”),而不是在列表中进行硬编码。 这给出了一个错误 在行打印行[x]中。我要去哪里错了?是否可以使用Dictreader提取列名称?

  • 如何从CSV文件中提取列? 我对Java有点陌生。你如何从csv文件中提取特定列。例如,如果我有这个数据: 如何提取第一列和第三列?我能够读取整个CSV文件,但我想从中提取特定的列。

  • 我正在寻找一个python库,能够提取一个mp3的实际数据(实际的声音/声音我们听)。我希望能够使用数据与另一个mp3文件进行比较,而不影响比特率/编码的过程。我该怎么做?

  • 我需要从大文件中提取文本(最大限制50MB)文件可能是doc、ppt、xls、txt或pdf格式。到目前为止,我使用了ApachePOI'http://poi.apache.org/' 用于Microsoft Office文档和PDFBox从PDF中提取文本。然而,随着文件变大,提取过程变得缓慢,特别是以下文件。到目前为止我取得的成果: 1. PPTX-45MB-3分钟apx 2.PDF-62MB