资讯动态

TBtools序列提取全攻略:从ID到坐标,从CDS到启动子

发布时间:2026/10/3 1:38:13 来源:尧图企业网站定制
做基因家族分析的头一晚我经常收到这种求助师兄丢过来一份基因ID列表说“把这些序列提出来”然后人就消失了。新手打开TBtools面对一堆菜单根本不知道点哪里。等我把流程彻底跑熟之后才发现序列提取这件事90%的坑根本不在操作上而在“没想清楚自己到底要提取什么”。这篇文章就把TBtools里和序列提取相关的核心功能一次讲透从按ID提取到按坐标提取从CDS到启动子从具体操作到报错排查全部过一遍。适合刚接触基因家族分析、手头有ID列表却不知道从哪里下手的同学也适合那些已经会用一点TBtools、但总在边界条件上翻车的朋友。1. 序列提取到底有几种提法动手之前先定位你的需求很多人打开TBtools就找“提取序列”这个按钮但真正用过就会发现TBtools里的序列提取从来不是一个功能而是一组功能。你先得搞清楚自己手里的材料是什么、想要的产物是什么才能选对入口。1.1 按ID提取与按坐标提取两条完全不同的路线序列提取的本质是从一个大的序列文件里按照某种“索引信息”把目标序列切出来。这个索引信息只有两类序列的名字ID或者序列在基因组上的位置坐标。这两种方式的底层逻辑完全不一样对应的TBtools功能也完全不同。按ID提取的场景是你手里有一份FASTA格式的大文件比如全基因组蛋白序列同时有一份基因ID列表你想把列表里对应的序列拿出来。这时候工具做的事情其实很简单——逐条读取ID列表去FASTA文件里找名字匹配的记录找到了就输出找不到就跳过。按坐标提取的场景则是你手里有一份基因组DNA序列FASTA还有一份GFF/GTF注释文件注释文件里写着每一个基因在第几条染色体上的什么位置。你想把某个区域的序列切出来比如某个基因的CDS、某个基因上游2000bp的启动子。这时候工具读取的是坐标信息在基因组序列上做切割再拼接。很多新手在这第一步就走错了。比如手里明明是坐标信息却硬套ID提取的思路结果自然是提了个寂寞。所以动手之前先问自己三个问题我有的“索引”是什么是ID列表还是GFF/BED注释文件我想提的“产物”是什么是蛋白序列、CDS序列还是包含上下游的基因组序列产物的“模板”是什么是全基因组蛋白文件还是全基因组DNA序列这三个问题想清楚了选哪个功能基本就是水到渠成的事。1.2 五种高频场景对照表我整理了基因家族分析里最常见的五种序列提取需求基本覆盖了日常90%的求助场景场景手头有什么想得到什么用什么功能提取家族成员的蛋白序列全基因组蛋白FASTA 基因ID列表目标成员的蛋白序列Extract FASTA提取家族成员的CDS序列全基因组CDS FASTA 基因ID列表目标成员的CDS序列Extract FASTA提取某基因的启动子区域基因组DNA FASTA GFF注释ATG上游1500/2000bp序列GXF Sequence Extract提取自定义区间的序列基因组DNA FASTA BED文件任意坐标区间的序列GXF Sequence Extract / Extract Genomic DNA提取基因结构可视化用的序列基因组DNA FASTA GFF注释基因全长含内含子GXF Sequence Extract最后一种容易被忽略做基因结构图就是那种外显子内含子示意图的时候通常需要基因的“全长转录本序列”也就是从转录起始位点到终止位点、把内含子也算进去的基因组序列。这个靠ID提取搞不定必须用坐标提取。1.3 TBtools功能入口地图TBtools的菜单结构在不同版本里会有点小变动但核心入口一直比较稳定Sequence Toolkit→FASTA Tools→Extract FASTA负责按ID提取Genomics→GXF Sequence Extract负责按GFF/GTF/BED注释文件提取新版TBtools把常用功能做成了图形化快捷按钮界面上能看到对应的图标但后台调用的仍然是这两个核心模块。如果界面上找不到直接看菜单栏或者用界面上的搜索框输入关键词“Extract”“GXF”也能定位。2. Extract FASTA按ID提取操作步骤与ID匹配的核心原理Extract FASTA是TBtools里最常用、也最容易被小看的功能。很多人以为这就是“导入文件、点开始”这么简单实际上它的输入格式、匹配规则和结果文件处理里藏着一堆细节哪一个没注意都会让你怀疑人生。2.1 界面上的三个关键输入项以TBtools 2.x版本为例打开Sequence Toolkit → FASTA Tools → Extract FASTA之后你会看到这样一个界面FASTA File输入大的序列文件比如全基因组蛋白文件.pep.fasta或全基因组CDS文件.cds.fasta。TBtools支持直接把文件拖进输入框也支持点击选择。ID List输入基因ID列表每行一个ID。可以直接粘贴文本也可以把ID文件拖进去。注意这个文件不需要是FASTA格式就是一个纯文本列表。Output File设置结果输出路径。如果不设置TBtools默认会在输入文件同目录下生成一个带extracted后缀的新文件。界面上通常还会有一个“Use First Matching”之类的勾选项不同版本叫法不太一样意思是在匹配到多条记录时是否只取第一条。这个选项默认开着问题不大但如果你怀疑自己的ID在文件里有重复可以关掉它把重复的匹配都保留下来方便排查。2.2 从ID列表到提取结果的完整操作流程假设我现在需要从全基因组CDS文件里提取某基因家族的CDS序列具体步骤如下第一步准备一个纯文本的ID列表文件。我习惯用Notepad或者VS Code打开确认每一行只有一个ID末尾没有多余空格。这里不要直接从Excel里复制粘贴Excel经常会在单元格里塞进隐藏的空格和换行符后面你会很难查。第二步打开Extract FASTA把CDS文件拖进FASTA File框把ID列表拖进ID List框设置输出路径。这时候可以先用小列表做个测试先放5个ID进去跑一遍确认输出正常再放全量ID去跑。这个习惯能帮你省掉大量的返工时间。第三步点击右下角的Start按钮。TBtools的执行速度取决于源文件的大小和ID列表长度一般几万条序列的文件也就几秒钟。跑完之后左下角的日志区会显示完成信息输出文件会出现在你设置的路径下。第四步验证结果。用TBtools的Sequence Toolkit → Fasta Stats功能统计一下提取出的序列条数和你的ID列表数量对比一下。如果一致说明全部匹配成功如果少了说明有部分ID在源文件里找不到。2.3 ID对不上的原因解剖提取结果条数比ID列表少这是99%的人都会遇到的问题。我一开始也以为是TBtools出bug了后来排查多了发现根因几乎都出在ID格式上。最常见的坑有三个第一个坑是FASTA文件头部写法不统一。有的文件里写的是gene1有的写的是gene1 protein有的写的是gene1|species|xxx。Extract FASTA默认是精确匹配你的ID列表里写的是gene1碰到gene1 protein这种就不可能匹配上。解决方法是先看一眼源FASTA文件的头部格式。用记事本打开文件看前几行的后面到底长什么样再决定ID列表怎么写。第二个坑是GFF文件里的ID和FASTA文件里的ID不一致。比如GFF文件里基因ID是gene:Zm00001d000001而CDS文件的FASTA头部是Zm00001d000001。这个时候你在ID列表里写前者在CDS文件里匹配不上写后者又在GFF里找不到对应关系。遇到这种情况先确认到底以哪个文件的ID为准再统一替换ID列表内容。第三个坑是Excel处理ID列表时惹的祸。Excel默认会把看起来像数字的ID转成科学计数法还会自动去掉前导零。基因ID里含有纯数字段的话非常容易中招。比如你明明想要gene000123复制到Excel里再看已经变成了gene123。解决方案是ID列表文件一律用纯文本编辑器处理或者在Excel里先把单元格格式设为“文本”再录入。2.4 一个我后来才学会的小技巧早期我做提取总是拿全量ID直接跑跑完发现少了几个再回头找是哪个ID出了问题一来一回特别浪费时间。后来我养成了一个习惯拿到ID列表后先随机挑5到10个ID在源FASTA文件里搜一下确认ID格式完全一致再跑全量。这个检查只要一分钟却能避免后面拿着残缺的结果做分析却不自知。另外如果你的源文件特别大比如几十万条序列全量ID跑完需要一些时间。这时候建议把输出文件命名为“物种名_提取内容_日期”的格式比如Zm_CDS_family_20250612.fasta而不是默认的xxx.extracted.fasta。为什么因为生信项目跑多了你就会发现三天后你自己都想不起来那个extracted文件里装的到底是什么。3. GXF Sequence Extract按坐标提取CDS、启动子与正负链如果说Extract FASTA是“从盒子里挑东西”那GXF Sequence Extract就是“从地图上圈地挖东西”。它按照GFF/GTF注释文件的坐标信息从基因组DNA序列上精确地切出目标区段。这个功能在启动子分析和基因结构提取中无人能替代。3.1 GFF/GTF文件基因组的位置说明书在讲解操作之前先简单说下GFF格式是什么。GFF文件本质上是一个表格每一行代表一个基因组特征用Tab分隔核心列包括序列名通常是染色体编号、来源、特征类型gene/mRNA/CDS/exon等、起始位置、结束位置、打分、链方向或-、相位以及属性IDxxx;Nameyyy;。TBtools的GXF Sequence Extract读取的就是这个文件里的坐标然后回到基因组FASTA里做切片。所以这个功能能提取出什么完全取决于你的GFF文件里标注了什么。如果你的GFF文件里没有CDS条目那无论如何也提取不出CDS序列。还有一个很多人忽略的点不同来源的GFF文件第三列的“feature type”叫法不一样。有的物种文件里叫mRNA有的叫transcript有的直接叫gene。提取的时候一定要先打开GFF文件看一眼确认你要提的层级到底是什么。不然你选了一个不存在的typeTBtools会直接提示找不到任何记录。3.2 GXF Sequence Extract的参数设置打开Genomics → GXF Sequence Extract界面大概是这样的Genomic FASTA File基因组DNA序列文件注意必须是染色体级别或scaffold级别的完整序列不能是蛋白序列。GXF FileGFF/GTF注释文件TBtools对这两种格式都支持。Type选择要提取的特征类型。常见选项有gene、mRNA、CDS、exon等。这一步非常关键我放到下面单独说。Upstream / Downstream设置向上下游各延伸多少bp。这个参数是启动子提取的核心一般设1500或2000。Strand Specific是否考虑链方向。正负链基因的处理全靠这个选项。填好之后点Start输出文件里的每条序列会用GFF属性里的ID来命名。3.3 提取CDS时为什么要选mRNA而不是gene这是我在教学里被问到最多的问题。很多人想提取基因的CDS序列直接在Type里选了gene结果提出来一大段包含内含子的序列翻译出来全长不完整。原因是GFF文件里gene这一行的坐标范围是整个基因从第一个外显子起点到最后一个外显子终点中间包含了所有内含子而mRNA或CDS条目才具体标注了每一个外显子的坐标。TBtools在提取CDS的时候会去看CDS类型条目的坐标或者从mRNA条目的外显子坐标里拼接出完整的CDS。如果你选的是gene它只会给你切一大段基因组序列内含子全在里面。所以我的建议是想把CDS翻译成蛋白做多序列比对就选CDS或mRNA让TBtools自动拼接外显子。想看基因的原始基因组序列包含内含子就选gene。想画基因结构图通常需要的是从转录起始到终止的序列选mRNA。一句话总结要完整的编码区选CDS/mRNA要包含内含子的全长基因段选gene。3.4 正负链基因的处理这个坑我摔过不止一次真核生物的GFF文件里基因除了分布在正链上还有相当一部分在负链上。TBtools的GXF Sequence Extract里有个“Strand Specific”选项默认可能是关着的。如果关闭了这个选项TBtools会直接把正负链的基因都按基因组序列的坐标从头往尾切。这时候负链基因提出来的序列实际上是你“该基因在基因组上的物理序列”而不是它在转录方向上应有的序列。用这种序列去翻译大概率是错的因为负链基因的编码序列在基因组的另一条链上它的起始密码子对应的位置和正链基因完全不同。正确的做法是勾选Strand Specific或者叫Consider Strand选项让TBtools对那些负链基因自动做反向互补输出转录方向上的序列。这样提出来的序列才是基因实际表达时的核酸序列。我在早期做启动子分析的时候就有一批负链基因的上游区域一直对不上后来发现根源就是没有考虑链方向。负链基因的“上游”在物理坐标上其实是它的后面一段必须反向互补之后才是它转录方向上的上游。这个细节如果你不犯一次错很难真正记牢。3.5 启动子序列提取的标准姿势基因家族分析里启动子分析几乎是固定项目。启动子一般取起始密码子ATG上游的区域长度通常选1500bp或2000bp。做法如下在GXF Sequence Extract里选择mRNA类型设置Upstream为1500或2000Downstream设为0勾选Strand Specific然后运行。输出的序列就是每个转录本上游1500bp的启动子区域。这里有个小问题需要注意很多物种的GFF注释并不是所有基因都有mRNA条目有的基因只有gene和CDS条目。遇到这种情况可以把Type选成gene再设置Upstream。因为gene的起点基本等于第一个外显子的起点从gene起点往上游取1500bp和从mRNA起点往上游取1500bp的区别不大。另外一个常见问题是如果基因位于染色体的最末端上游不够1500bpTBtools会取它实际能取到的那一段。分析结果里偶尔会出现几条特别短的“启动子”不用慌张那只是坐标超出了染色体边界属于正常的边界效应。这种情况在分析时可以单独标注也可以做剔除处理。4. 基因家族分析一条龙从ID列表到蛋白/CDS/启动子前面说了那么多功能细节这一章我把基因家族分析里序列提取的完整流程串起来走一遍。虽然听起来像是在炒冷饭但把各个功能摆到真实的项目节奏里你会更清楚每一步的输入输出关系。4.1 一次典型家族分析的序列提取要经历什么一个标准的基因家族分析流程大体上是先用HMM模型或BLAST做全基因组搜索拿到一堆候选基因ID然后提取这些候选基因的蛋白序列做保守结构域验证确认成员后提取CDS序列用于进化树构建再提取启动子序列做顺式作用元件分析。整个过程中序列提取至少要做三轮第一轮提取蛋白序列。从全基因组蛋白FASTA里按候选ID列表提取蛋白序列用于下一步的结构域验证。这里用的是Extract FASTA。第二轮提取CDS序列。经过验证后确定了最终的家族成员名单再从全基因组CDS文件里提取CDS序列用于多序列比对和进化树构建。这里同样是Extract FASTA但源文件和目标是CDS。第三轮提取启动子区域。用GFF文件里的坐标信息从基因组DNA里提取每个成员起始密码子上游的序列用于顺式元件分析。这里必须用GXF Sequence Extract。第一轮和第二轮经常被合并很多人图省事直接用CDS文件来回分析。但我建议该走蛋白验证就走蛋白验证因为CDS能正确翻译不代表它就是完整的蛋白编码序列有些假基因的CDS虽然还在但已经失去了完整的开放阅读框。先提蛋白、验证结构域再回头提CDS顺序别乱。4.2 一次完整操作的串联演示假设我们从某个物种的基因组里鉴定出了38个候选基因现在要走完整流程用一个ID列表文件family_IDs.txt内容就是38个基因ID每行一个。打开Extract FASTA输入物种全基因组蛋白文件species.pep.fasta和上述ID列表输出family_prot.fasta。用TBtools的Sequence Toolkit → Fasta Stats或直接打开文件确认提取出的序列条数。如果是38条说明ID匹配成功如果不足回到上一章的排查思路检查ID格式。用这38条蛋白序列去NCBI CDD或Pfam做结构域验证剔除没有完整结构域的假阳性成员。假设最终确认33个成员更新ID列表为family_confirmed_IDs.txt。再次使用Extract FASTA输入全基因组CDS文件species.cds.fasta和确认后的ID列表输出family_cds.fasta这就是后续建树用的核心序列。打开GXF Sequence Extract输入基因组DNA文件species.genome.fasta和GFF注释文件选择mRNA类型设置Upstream2000Downstream0勾选Strand Specific输出family_promoter_2kb.fasta。三个产物文件齐活后面的分析就可以开始了。步骤本身不复杂但有几个位置容易出乱子。第4步和第5步之间ID列表更新了但如果你偷懒没有同步更新直接用旧列表去提取CDS就会多出几个根本没通过验证的假基因。这种错误不会让程序报错却会污染后续所有分析而且很难被发现。所以我每次都要求自己ID列表和产物文件要一一对应换一个验证步骤就换一个新命名的ID文件别在原文件上改来改去。4.3 提取完之后的质检清单序列提取不是点完Start就万事大吉的提交下游分析之前至少要做一轮快速质检。我列了一个自查清单每一条都花不了几秒钟但能避免灾难性结果是否每个ID都有输出序列用Fasta Stats统计条数和ID数量比对。蛋白序列是否以M开头虽然不是100%绝对但如果批量提取的蛋白里出现一堆不以M开头的大概率是CDS提取或翻译出了问题。CDS序列长度是否是3的倍数如果大量不是说明提取时包含了内含子或者坐标切错了。启动子序列文件名里是否带上了正负链信息如果你勾选了Strand Specific负链基因的启动子序列应该已经是正确方向的了这一点用眼睛抽查几条即可。我不会把这些步骤说成是“必须严格执行的规范”因为实际项目时间紧的时候你不可能每一条都查得那么细。但至少条数和序列格式这两条一定要看。我自己的经验是这两个最简单的检查能拦下80%的返工。5. 报错、卡死与结果异常从实际项目里攒下的排查经验最后这一章集中写一写我这几年来用TBtools做序列提取时遇到过的典型问题和排查思路。这些问题不那么“高端”但真实项目里经常会遇到而且第一次遇到的时候你多半会一脸懵。5.1 “ID not found”根因几乎全是格式问题TBtools在运行Extract FASTA时如果ID列表里有大量ID匹配不上日志区域会输出类似[Error] Can not find ...的提示。很多人第一反应是“这个ID不在文件里”但我排查了这么多回真正的情况往往是ID列表里带了看不见的字符。把ID列表在Notepad里打开开启显示所有符号看看每行末尾有没有多余的CR或空格。FASTA文件的ID和ID列表的大小写不一致。TBtools默认区分大小写Gene001和gene001是两个完全不同的ID。FASTA文件的头部带了额外信息。有的文件写成Zm00001d000001_T001你在ID列表里写Zm00001d000001自然对不上。排查的套路也很固定先取一个报错ID在源FASTA文件里用CtrlF搜一遍看看它的真实写法。如果搜不到说明ID本身确实不在文件里去核对来源如果搜到了但长度和样子不一样那就是格式问题统一改掉即可。5.2 大文件卡死与内存不足TBtools虽然是Java写的对内存相对友好但遇到大基因组文件还是可能出现“跑着跑着没反应了”的情况。我遇到过一次提取十几GB基因组序列区间结果界面卡了十分钟没有响应。这里有一个经验TBtools的界面卡死不代表程序死了。在等待的时候你可以打开任务管理器Windows或活动监视器macOS看看Java进程的CPU和内存占用。如果CPU还在跳动说明它在干活只是数据量大需要时间。如果CPU归零且长时间不动多半是程序进入了等待状态或内存溢出了。对于超大文件我现在的处理办法是检查分配给Java的内存是否充足。查看TBtools启动脚本里的-Xmx参数如果只有默认的512MB跑大文件自然会内存不足。手动调成-Xmx4g或更高。尽量使用染色体级别的FASTA文件不要用夹杂大量未组装小contig的文件减少不必要的IO和匹配开销。如果同一个操作要跑多遍尽量把文件预处理成干净格式再跑。5.3 提取结果的序列条数不对文件顺序与去重逻辑还有一种场景是提取结果条数比预期多了。原因通常是ID列表里本身有重复ID或者源FASTA文件里有重复的序列头部。TBtools在处理这种输入的时候会忠实地把每次匹配到的东西都输出所以重复就重复了。这时可以用TBtools的Sequence Toolkit → Fasta Tools → Remove Duplicate Sequences或类似的去重功能快速清理。但要注意去重前先判断这些重复是本身该有还是数据污染如果是一个基因有多个转录本导致多条序列共享同一个基因ID那这些序列是合法的不应该被盲目去重。另外有一个容易被忽略的情况有的GFF文件里同一条染色体在不同scaffold版本里的名字不一致。比如GFF里写的是chr1基因组FASTA的头部却写的是Chr1或1坐标对不上GXF Sequence Extract就会提取不到任何序列或者只提到一部分。这时候需要先统一序列名的命名规则再送入TBtools。之前一起做项目的同事在这类问题上卡了一个下午最后发现就是大小写不统一挺冤的。5.4 gzip压缩文件能不能直接喂给TBtools很多从公共数据库下载的基因组文件是.gz后缀的压缩格式。TBtools对gzip压缩的FASTA和GFF文件是支持的直接拖进去就能识别这点确实省事。但我个人还是建议如果文件不是特别大先解压再操作会更稳。原因有两个一是压缩文件在读取时需要额外的解压计算大文件反而更慢二是出问题时排查输入文件格式的难度会增加你很难一眼看出文件内容长什么样。5.5 结果文件打不开或编码乱码TBtools的输出文件默认是UTF-8编码的文本。如果你用Windows自带的记事本打开看到乱码别急着改文件用Notepad或VS Code打开基本就正常了。后续如果要提交到Linux服务器上分析也建议统一转成UTF-8无BOM格式避免在Linux下出现奇怪的字符影响下游程序识别。最后再分享一个小习惯序列提取这件事做得多了你会发现工具本身并不难难的是让整个流程可复现、可追溯。我现在每次给项目做序列提取都会把以下三样东西放在同一个文件夹里输入文件的来源说明从哪个数据库下载的什么版本、ID列表文件、提取产物文件。命名一律按“物种_类型_日期”来。这样做的好处是三个月后文章返修需要重新提取序列时我不需要再花半天回忆当初用的什么参数、提的哪个版本。另外一个非常实际的建议如果你要投稿或提交数据到公共数据库一定要记录下TBtools的版本号和你使用的参数配置。很多期刊对软件版本有要求而且不同版本的TBtools在某些边界处理上确实存在细微差异。把这个信息写进方法的“材料与方法”部分比临时翻聊天记录找当初怎么跑的靠谱得多。TBtools的序列提取功能说到底是整个基因家族分析流程里最基础、也最好掌握的一环。把这一环吃透了后面做结构域验证、进化树构建、启动子分析你才有底气说自己的数据是可靠的。希望这篇内容能帮你少走几步弯路把时间花在更值得纠结的分析问题上。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑