2

我有一个包含几个蛋白质序列的 FASTA 文件。格式就像

----------------------
>protein1
MYRALRLLARSRPLVRAPAAALASAPGLGGAAVPSFWPPNAAR
MASQNSFRIEYDTFGELKVPNDKYYGAQTVRSTMNFKIGGVTE
RMPTPVIKAFGILKRAAAEVNQDYGLDPKIANAIMKAADEVAE
GKLNDHFPLVVWQTGSGTQTNMNVNEVISNRAIEMLGGELGSK
IPVHPNDHVNKSQ

>protein2
MRSRPAGPALLLLLLFLGAAESVRRAQPPRRYTPDWPSLDSRP
LPAWFDEAKFGVFIHWGVFSVPAWGSEWFWWHWQGEGRPYQRF
MRDNYPPGFSYADFGPQFTARFFHPEEWADLFQAAGAKYVVLT
TKHHEGFTNW*

>protein3
MKTLLLLAVIMIFGLLQAHGNLVNFHRMIKLTTGKEAALSYGF
CHCGVGGRGSPKDATDRCCVTHDCCYKRLEKRGCGTKFLSYKF
SNSGSRITCAKQDSCRSQLCECDKAAATCFARNKTTY`

-----------------------------------

有没有一种好方法可以读取这个文件并分别存储序列?

谢谢

4

3 回答 3

6

要做到这一点,一种方法是:

  1. 创建一个向量,其中每个位置都包含一个名称和序列
  2. 逐行浏览文件

    • 如果该行以开头,>则在向量的末尾添加一个元素,并将 line.substring(1) 作为蛋白质名称保存到该元素中。将元素中的序列初始化为 equal ""
    • 如果 line.length == 0 那么它是空白的并且什么也不做
    • 否则该行不开始,> 那么它是序列的一部分,所以去当前向量 element.sequence += 行。这样,>protein2和之间的每一行都>protein3被连接起来并保存到protein2
于 2010-06-22T20:58:22.987 回答
5

我认为关于确切文件结构的更多细节可能会有所帮助。只需查看您拥有的内容(并快速浏览wikipedia上的示例),就表明蛋白质的名称以>. 开头,后跟至少一个换行符,因此这是一个很好的起点。

您可以在换行符上拆分文件,并寻找一个>字符来确定名称。

从那里开始不太清楚,因为我不确定序列数据是否都在一行中(没有换行符)或者是否有换行符。如果没有,那么您应该能够只存储该序列信息,然后继续下一个蛋白质名称。像这样的东西:

var reader = new StreamReader("C:\myfile.fasta");
while(true)
{
    var line = reader.ReadLine();
    if(string.IsNullOrEmpty(line))
        break;
    if(line.StartsWith(">"))
        StoreProteinName(line);
    else
        StoreSequence(line);
}

如果是我,我可能会使用 TDD 和一些示例数据来构建一个简单的解析器,然后继续插入示例,直到我觉得我已经涵盖了格式中的所有主要差异。

于 2010-06-22T21:04:00.267 回答
2

可以使用 C# 以外的语言吗?在 Perl、Python、Ruby、Java 和 R 中处理 FASTA 文件和其他生物序列有很多优秀的库(我想不到)。它们通常被命名为 Bio*(即 BioPerl、BioJava 等)

如果您对 C 或 C++ 感兴趣,请在 Biostar 上查看此问题的答案:http: //biostar.stackexchange.com/questions/1516/cc-libraries-for-bioinformatics

帮自己一个忙,如果不需要,不要重新发明轮子。

于 2010-06-23T19:18:57.133 回答