3、输入文件准备:FASTA格式、序列ID规范、多序列文件

3.1 先聊聊FASTA格式的基本盘

做过生物信息的朋友,对FASTA格式都不陌生。说白了,它就是一种纯文本的序列存储方式。我刚开始做大规模注释时,觉得这份简单得很,但后来吃了不少亏才明白——越是简单的格式,越容易在细节上翻车。

一个标准的FASTA文件,两行一个记录:

  • 第一行以 > 开头,后面跟着序列描述信息
  • 第二行开始写序列数据(核苷酸或氨基酸)
  • 一条序列可以跨多行,但每行建议不超过80个字符

举个正确的例子:

>sp|P01130|LDLR_HUMAN Low-density lipoprotein receptor
MLGPCPLLCLLPLLLALLALALALAPAVQGDRCERNEFQCQDGKCISYKWVCDGSAECQDGSDESQE
TCLSVTCKSGDFSCGGRVANRGIQIGIRGPSGQCAKPCKLPEVATSCQ

嗯,这里要注意一个常见坑:序列行不能有空行。我记得有次帮同事排查,他跑了五小时的InterProScan全崩了,最后发现就是序列间插了个空行,程序直接报解析错误。

常见FASTA不规范写法:
  • 描述行空行:>后直接回车,这在多数工具里会报错
  • 等号连接信息:>sp|P01130 (正常应为竖线分隔|)
  • 序列中包含空格或数字:>AS MVLST... 这类写法请避免
  • 文件编码不是UTF-8,导致特殊字符乱码

3.2 序列ID规范——这个真的容易被忽略

现在说说序列ID。InterProScan在处理批次注释时,会拿这个ID作为输出结果的唯一标识。如果ID不达标,后面所有解析都是白费功夫。

我个人习惯把序列ID限制在以下几类字符:

  • 字母数字:a-z, A-Z, 0-9
  • 下划线:_ 用于区分不同字段
  • 分隔符:| 在UniProt格式中常用
  • 点号:. 用于表示版本号(如gene_123.1)

绝对不能用的字符:空格、制表符、中文标点、特殊符号如@#$%^&*()。为什么会这样?因为InterProScan底层会用这些ID做文件名,Windows/Linux文件系统对这些字符敏感得很。

ID类型 正确示例 错误示例 说明
UniProt sp|P01130|LDLR sp P01130 LDLR 必须使用竖线分隔
自定义 Os01g0100100 Os 01g 0100 100 不能有空格
长描述序列 AF123456.1 AF123456(1) 括号会引发解析异常
多基因名 Eukaryota_BRCA1 Eukaryota-BRCA-1 连字符可能导致排序问题
一个实用技巧:如果拿不准自己的ID是否规范,可以在Linux下跑一下 grep "^>" your.fasta | head -5 查看前几条ID。所有非ASCII字符全部删掉最保险。

3.3 多序列文件的组织方式

讲完了单条序列,咱们来谈谈多序列文件。很多人拿到的FASTA文件是直接从某些数据库导出的,格式五花八门。我曾经接手过一个项目,十六万条序列塞在一个文件里,打开一看——有50%都是重复的或ID冲突的。

多序列文件的几个硬性要求:

  1. ID必须唯一:不能出现两条序列以同一个>开头
  2. 序列完整:不能截断,不能混入非标准氨基酸字符
  3. 顺序无关:InterProScan不依赖输入顺序,但建议按相似度或基因组顺序排列
  4. 文件大小:单个FASTA文件不要超过2GB,超过后建议分拆

举个例子,我常用的检查脚本会先提取文件中的所有ID,看看有没有重复:

grep "^>" your_sequences.fasta | sort | uniq -d

如果这个命令输出不为空,恭喜你,有麻烦了。重复的ID会导致InterProScan在最终输出中覆盖数据,结果会少掉一半。

3.4 避开那些我曾走过的弯路

我总结的几条避坑经验,现在分享给你:

  • 序列行不能有数字或空格——很多NCBI导出的FASTA里序列行末尾会有行号,必须去掉
  • 不要用中文或全角字符做ID——哪怕你用的是Mac或Linux,跨平台交换时必出编码错乱
  • ID长度不要超过50个字符——太长的话,输出文件中的制表符对齐会乱掉
  • 多序列之间保留1行空行?——不行,任何工具都不允许,只能用一个>号来分隔

一条完整的标准多序列FASTA示例:

>seq1_HUMAN
MKFLILFNILVSTLAFLSSSCFQEEIQELKAKYATRLVDENKII
>seq2_MOUSE
MKSRLILFNILVSTLAFLSSSCFQEEIQELRAKYAARLVDENKII
>seq3_RAT
MKSTLILFNILVSTLAFLSSSCFQEEIQELKAKYAARLVDENKIV

你看,这样干净清爽。第三行的ID我用了常见的物种缩写,中间用下划线连接。这种命名方式在后续查找注释结果时会非常方便。

3.5 核心逻辑图:序列文件准备流程

下面这张图总结了我处理FASTA文件时的标准流程,帮你快速理清思路:

FASTA批次序列文件准备流程 原始FASTA文件 检查ID规范性 删除空格/特殊字符/中文 排重:禁止重复ID grep+sort+uniq -d检查 序列完整性检查 去除非标准氨基酸字符 标准化FASTA文件

看懂这张图了吗?就是三步走:先过ID关,再去重,最后检查序列质量。按这个流程执行,你的FASTA文件基本不会出大问题。我这些年看过的序列文件有个惊人的相似点——80%的报错都是ID不规范引起的。别小看这个步骤,它能省你几小时调错时间。

一句话记忆法:FASTA文件三要素——ID干净、不重复、序列纯字符。做到了这三点,批处理就能跑得顺顺当当。