ENSEMBL下载GTF注释文件全指南:版本选择与下载流程详解
最近有不少做RNA-seq、变异注释和功能基因组学分析的朋友问我说第一次去ENSEMBL官网下载人类参考基因组的GTF注释文件结果面对一堆release、GRCh38、GRCh37、GFF3、gtf.gz直接懵了。明明只是一个下载操作最后却耗了一晚上还没搞清楚该点哪里。这篇就把我在实际项目里反复验证过的下载流程、网址规律和踩坑点全部摊开来讲从图形界面到命令行覆盖完整希望能让你少走几步冤枉路。1. 动手前先分清两个概念GTF注释文件和参考基因组版本生物信息学里很多报错本质上不是操作问题而是概念没分清。先花几分钟把GTF文件和版本选择这两个基础问题捋清楚后面下载才不会选错。1.1 GTF注释文件里装的是什么GTF全称Gene Transfer Format是一个用制表符分隔的纯文本文件用来描述基因结构。每个基因的转录本、外显子、CDS在参考基因组上的位置在这个文件里都有明确记录。你下载到的Homo_sapiens.GRCh38.112.gtf.gz解压后前几行看起来是这样##!genome-build GRCh38.p14 ##!genome-version GRCh38 ##!genome-date 2013-12 ##!genome-build-accession NCBI:GCA_000001405.28 1 ensembl gene 11869 14409 . . gene_id ENSG00000223972; gene_version 5; gene_name DDX11L1; gene_source ensembl; gene_biotype transcribed_unprocessed_pseudogene;#!开头的是元信息真正描述基因结构的行一共有9列。这9列我建议每个做序列分析的人都记牢因为后面写脚本过滤基因、提取启动子区间、合并表达矩阵时都要反复用到这些列。列号字段名说明1seqname染色体或scaffold编号如1、2、X、MT2source注释来源常见为ensembl、havana3feature特征类型如gene、transcript、exon、CDS4start起始位置1-based坐标5end终止位置6score可信度分数ENSEMBL通常用点号表示缺失7strand正负链 或 -8frameCDS阅读框偏移非编码特征通常为点号9attribute属性列包含gene_id、gene_name、gene_biotype等关键信息很多刚接触GTF的同学以为下载了注释文件就等于拿到了基因序列。不是的。GTF只给出坐标和基因结构不包含碱基序列。你想提取某个基因的cDNA或蛋白序列得用GTF坐标去参考基因组fasta里切或者走ENSEMBL的BioMart、API接口。1.2 版本选错会带来什么后果参考基因组最常见的有两个版本家族GRCh37对应UCSC里的hg19和GRCh38对应hg38。GTF下载之前不把版本定下来很可能跑完几十个小时的比对和定量流程最后报告一批坐标和已知数据库对不上。举例来说一个基因在GRCh37下位于1号染色体1000到2000的位置到GRCh38里可能因为组装修正变成1100到2100位置整体变了。如果你把GRCh37的GTF和GRCh38的BAM放一起用featureCounts跑最直接的报错就是无法构建特征或者基因区间匹配不上。那怎么选新数据从头分析没有历史兼容负担直接用GRCh38。复现别人留下的旧流程或者某个数据库、某批位点名单基于GRCh37/hg19整套都用GRCh37。样本比对本来就用GRCh37的参考基因组和索引那GTF也必须继续用GRCh37不能只单独换GTF。同一套分析流程里参考基因组fasta、比对索引、GTF注释、变异数据库必须来自同一个版本家族。交叉使用不一定会立刻报错但后续所有注释、富集结果的可信度都会打折扣。2. 图形界面操作全流程GRCh38最新GTF怎么一步步拿到手给还没接触过ENSEMBL FTP布局的同学先演示最稳健的图形界面下载方式。2.1 从ENSEMBL官网找到FTP入口打开ENSEMBL主站 www.ensembl.org在页面底部或者导航栏找到“Downloads”或者“FTP”入口。网站把所有数据文件汇总在/info/data/ftp/index.html页面进去之后就能看到不同数据类别的说明。不想在页面里慢慢翻也可以直接访问https://ftp.ensembl.org/pub/这个路径在浏览器里会显示成一个目录列表。以最新release版本为例你会看到类似release-112的目录名也会有更早的release目录。每一个release目录就是一个季度性的注释发布版本。用浏览器点文件夹时注意这是个FTP目录索引层级关系非常清晰。Chrome、Edge都能直接浏览和下载。但网络不太稳的时候浏览器下载大文件很容易中断而且没有断点续传能力。所以我个人建议用图形界面确认文件位置、核对路径真正下载大文件还是用命令行方案。2.2 人类GTF文件的完整路径最新版人类GRCh38的GTF路径非常固定https://ftp.ensembl.org/pub/release-112/gtf/homo_sapiens/Homo_sapiens.GRCh38.112.gtf.gz其中release-112按最新版本替换。进入gtf目录后你会看到一堆物种目录比如homo_sapiens、mus_musculus、danio_rerio。点进homo_sapiens里面就是当前release对应的GTF和GFF3文件。下载前花一分钟检查文件名。Homo_sapiens.GRCh38.112.gtf.gz里包含三段关键信息组装版本是GRCh38ENSEMBL注释发布版本号是112文件类型是.gtf.gz。注意112不是GRCh38组装版本本身的编号而是ENSEMBL的发布版本号。GRCh38这个组装是2013年底发布的一直通过补丁更新ENSEMBL则每季度发布新的注释版本文件名里的数字就是这些发布时间点。有几个误区需要特别提醒GTF和GFF3不是一回事。虽然结构类似但GFF3属性列写法更灵活很多工具只认GTF比如STAR构建索引默认用GTFcellranger对GFF3也需要额外处理。默认下载GTF就对了。别随手点页面右侧的“基因组序列”链接有时候会把你带到另一个物种或者另一个版本。下载前看文件大小是否合理。人类GRCh38的GTF压缩后通常在50到70MB如果只有几KB大概率是超链接页面不是真实文件。2.3 下载后如何快速确认文件没坏下载完.gtf.gz先别急着解压可以先做一个轻量检查。在Linux下zgrep -c ^# Homo_sapiens.GRCh38.112.gtf.gz人类GTF的元信息注释行通常只有5到6行数字过低说明文件不完整。再用zcat Homo_sapiens.GRCh38.112.gtf.gz | wc -l大概率能看到三百万行左右的记录。不同版本行数略有浮动但如果差太多就重新下载。3. GRCh37的下载路径比想象中多一层为什么要专门走grch37目录很多人在最新release目录里找GRCh37找到一个404然后开始怀疑普通网址。原因很简单ENSEMBL已经不再为GRCh37更新注释所以它不和最新版本放在同一个目录里。3.1 ENSEMBL对GRCh37的特殊处理ENSEMBL把GRCh37相关文件归入一个独立目录https://ftp.ensembl.org/pub/grch37/里面结构和主目录类似但release号停留在某个历史版本。过去常见的GRCh37版本号包括release-75、release-87、release-105。网上流传的大量教程、脚本、数据库下载链接经常写的是grch37/release-75或者grch37/release-87。如果你是为了复现一篇旧文章最靠谱的办法是翻文章方法部分对应的ENSEMBL版本号再到这个历史目录里找。这里必须提醒一个很多人混淆的点GRCh37和hg19在绝大多数常染色体上坐标一致但ENSEMBL和UCSC在染色体命名上有差异。ENSEMBL的GTF用1、2、X、MTUCSC的hg19文件通常用chr1、chr2、chrX、chrM。下载阶段没有区别但用GTF和来自UCSC的比对文件匹配时必须先统一命名规则否则所有区间都会匹配不上。这个问题GRCh38同样存在不是GRCh37独有的。3.2 实际下载操作想要下载GRCh37的GTF比较可靠的路径是https://ftp.ensembl.org/pub/grch37/current/gtf/homo_sapiens/Homo_sapiens.GRCh37.105.gtf.gz如果明确要旧版release-75路径改成https://ftp.ensembl.org/pub/grch37/release-75/gtf/homo_sapiens/Homo_sapiens.GRCh37.75.gtf.gzcurrent是一个符号链接指向GRCh37最后一个更新版本。脚本里写current的好处是不用记住具体release号以后打开也能拿到那个时间点最后版本的GRCh37注释。但如果你要严格复现旧分析还是得把路径里的release号写死不能依赖current。进入grch37目录之后会发现它下面还有fasta、variation、regulation等子目录。只想下载GTF的同学其他目录先忽略免得下载一堆用不到的大文件。4. ENSEMBL网址规律拆解以后不再靠人肉记链接ENSEMBL的FTP路径是高度模板化的。掌握规律之后你可以不逛网页直接拼出任意物种、任意release的下载链接。4.1 URL模板拆解一次下载的完整URL通常由五段构成段位示例说明服务器根路径https://ftp.ensembl.org/pub通用入口版本目录release-112 或 grch37/release-105新版本主目录 / 旧版本特殊目录数据类型目录gtf常见有gtf、gff3、fasta、cdna、pep物种目录homo_sapiens小写加下划线文件名Homo_sapiens.GRCh38.112.gtf.gz物种首字母大写.组装版本.发布版本.扩展名用这个规律拼接就可以得到斑马鱼和小鼠的GTFhttps://ftp.ensembl.org/pub/release-111/gtf/danio_rerio/Danio_rerio.GRCz11.111.gtf.gz https://ftp.ensembl.org/pub/release-111/gtf/mus_musculus/Mus_musculus.GRCm39.111.gtf.gz最容易出错的地方是文件名里的组装版本和ENSEMBL release号并不独立。比如release-112目录里的GTF文件名一定带112如果你拿着一个旧文件的命名习惯去组合新版本就会404。4.2 用目录列表自动生成下载任务批量下载多个物种的时候很多人还在网页里一个一个点特别低效。可以先拿到目录列表再脚本化生成URL。在Linux终端用curl抓目录索引curl -s https://ftp.ensembl.org/pub/release-112/gtf/ | grep -oE href[^]*/ | sed s/href//;s/\/// | grep -v ^\.拿到物种目录列表后再生成文件URLbasehttps://ftp.ensembl.org/pub/release-112/gtf for species in homo_sapiens mus_musculus danio_rerio; do echo ${base}/${species}/ curl -s ${base}/${species}/ | grep -o Homo[^]*gtf.gz done这只需要一点Shell知识但能省掉大量重复劳动。如果需要一次下载几十个物种的GTF推荐脚本组合加批量下载工具而不是一个个点。4.3 文件名中隐藏的匹配原则参考基因组fasta的名字和GTF名字必须对应。你下载的是ENSEMBL release-112的GRCh38 fastaGTF也尽量用112。如果你非要用GENCODE的GTF配ENSEMBL的fasta两者又都基于GRCh38多数基因ID可以对应但注释来源不一致会给后续比较带来麻烦。严格项目尽量统一来源、统一release。5. 命令行下载与校验把下载操作沉淀成流程图形界面只适合偶尔下载一两个文件。项目级分析我建议把下载命令写进文档或脚本保证换台电脑也能快速复现。5.1 wget和curl怎么选两个工具都能下载区别主要在习惯和场景wget天然适合下载文件支持递归、断点续传、限速是大多数人下载GTF的第一选择。curl更适合调API、抓目录列表、调试请求头。下载GTF我用这条命令wget -c -t 5 -O Homo_sapiens.GRCh38.112.gtf.gz \ https://ftp.ensembl.org/pub/release-112/gtf/homo_sapiens/Homo_sapiens.GRCh38.112.gtf.gz参数说明-c继续中断的下载避免从头再来-t 5网络错误时重试5次-O指定输出文件名防止服务器端文件名变化导致混乱。如果下载到一半断网了重新执行同一条命令就能接着下载。这一点对几十MB到几百MB的GTF文件很重要浏览器方案做不到这么丝滑。5.2 下载后的完整性校验文件下载完只是第一步。ENSEMBL的发布目录里通常附有CHECKSUMS文件里面包含了该目录下所有文件的MD5校验值。下载同一个目录下的CHECKSUMS然后md5sum -c CHECKSUMS --ignore-missingGTF那一行显示OK就说明文件没问题。如果没有校验文件也可以单独算MD5再和服务器上标记的摘要值比md5sum Homo_sapiens.GRCh38.112.gtf.gz我踩过一次坑用浏览器下大文件表面文件大小一致解压后却少了很多行某些染色体数据直接缺失后续定量结果少了一截。所以现在不管用什么方式下载都会补一道MD5校验。这不是形式主义是防止后面所有步骤白跑的关键防线。有的流程只接受未压缩的GTF需要自己解压gzip -dk Homo_sapiens.GRCh38.112.gtf.gz-k参数保留原始压缩文件避免后面万一需要重新解压。5.3 用rsync做目录级同步需要批量下载某个物种目录下的全部注释文件时可以跳过wget改用rsyncrsync -avz --progress \ rsync://ftp.ensembl.org/ensembl/pub/release-112/gtf/homo_sapiens/ \ ./ensembl_112_human_gtf/rsync的优势在于增量同步已经下载且大小一致的文件会直接跳过断线后重新执行不会重复传输。缺点是系统需要装rsyncWindows用户要借助WSL或Cygwin。大型项目建议优先考虑这个方式。6. 常见报错与自查清单从404到染色体命名冲突下载GTF看起来简单实际每天仍能遇到各种问题。把我自己遇到过的和身边人反复问的问题一并总结在这里。6.1 404到底是谁的锅最典型的错误是版本号混用。比如访问https://ftp.ensembl.org/pub/release-112/gtf/homo_sapiens/Homo_sapiens.GRCh38.111.gtf.gz但release-112目录里只有112文件于是404。另外有些早期release里没有gtf目录而是只有gff3目录同样会404。遇到404别急着怪网络先逐段检查URL路径是否匹配。6.2 下载文件打开乱码或解压失败如果你得到的是几十MB的.gtf.gz解压报gzip: invalid compressed>