从NCBI 上下载 gbff 文件并得到 CDS 信息
最近入门学习生信,面临的一个问题就是如何下载和预处理海量的基因组数据,尤其是 NCBI 上的 gbff 基因组注释文件,网络上翻了很久也找到对新手比较友好的代码,索性自己写了一段~
要处理的有两个问题,在此分别讨论:
一. 如何下载指定的文件(压缩包)且压缩包不损坏?
在此参考 NCBI 官方指南:Genomes Download FAQ (nih.gov)
个人之前是使用 wget 下载,常常出现压缩包损坏的情况,换了 rsync 没有再出现过该问题。
抓取文件的后缀(可以更换):
- genomic.gbff.gz
- protein.faa.gz
网站地址(为啥我是用 https 而不是一步到位使用 rsync 或者 ftp?因为 https 我还可以直接进入该网页看看情况):
https://ftp.ncbi.nlm.nih.gov/refseq/release/archaea/
https://ftp.ncbi.nlm.nih.gov/refseq/release/bacteria/
# 安装/导入 os、re、request 包
# 终端操作: pip install requests
import os
import re
import requestsdef load_url_context(type ,url):# 从网页中提取指定文件目录request = requests.get(url)raw_list = re.compile(r'<a.*?>(.*?)</a>').finditer(request.text.strip())file_name = "_".join([type,"context.txt"])with open(file_name, "w") as f:for i in raw_list:x = i.group(1)if x.endswith("genomic.gbff.gz") or x.endswith("protein.faa.gz"):file_https = ''.join([url,x])# 使用 rsync 开头file_ftp = file_https.replace("https","rsync")#print(file_ftp)f.write(file_ftp)f.write('\n')f.close() if __name__ == "__main__":archaea_url = "https://ftp.ncbi.nlm.nih.gov/refseq/release/archaea/"bacteria_url = "https://ftp.ncbi.nlm.nih.gov/refseq/release/bacteria/"load_url_context("archaea", archaea_url)load_url_context("bacteria", bacteria_url)
上面的代码最后生成文件下载路径,再写一个小脚本开始下载数据
#!/bin/bashwhile read line
do rsync --copy-links --recursive --times --verbose $line bacteria/
done < archaea_context.txt
二. 是如何从注释文件中摘取自己想要的 CDS 注释信息
在上述网站上下载得到的数据是非常大的,尤其是细菌的基因组数据,但是有很多的注释信息我们用不到的,所以需要进一步操作精简一下内容。
在此我使用了 Biopython,用于 gbff 文件的导入,详情可以查看以下连接。
中文版:第5章 序列输入和输出 — Biopython-cn 0.1 文档
官网:Introduction to SeqIO · Biopython
本文我主要是想得到以下信息
Locus_tag |
ORFStart..ORFStop |
Strand |
OrganismID |
ContigID |
Accession |
KQY27_RS09175 | 167785:168877 | - | Methanobrevibacter sp. TMH8 k121_54413-GCF_020148105.1 | NZ_JAHLZE010000038.1 | WP_224426279.1 |
import os
# 提前下载 Biopython 包
from Bio import SeqIO# 搜索 gbff 文件,返回 gbff 文件路径
def GbffContext(path, types):file_path = path + typesfiles_path = os.path.abspath(file_path)all_files = os.listdir(files_path)context = []for file in all_files:if file.endswith("gbff"):gbff_file_path = file_path + '/' + filecontext.append(gbff_file_path)return context#产生 cds.pty 文件
def CdsCoordinate(path, type):record_iterator = SeqIO.parse(path, 'genbank')cds_file = '_'.join([type,"cds.pty"])with open(cds_file,'a') as f:try:while(True):record = next(record_iterator)t = record.featuresfor t_cds in t:# cds 注释中必然含有 protein_id 的 keyif t_cds.qualifiers.__contains__('protein_id'):f.write(str(t_cds.qualifiers["locus_tag"])[2:-2])# locus_tag, [2:-2]为了去掉括号和引号,下文同理f.write('\t')f.write(str(t_cds.location)[1:-4]) # ORFStart..ORFStopf.write('\t')f.write(str(t_cds.location)[-2])# Strandf.write('\t')f.write(record.description.split(',')[0])f.write('-')f.write(str(record.dbxrefs[-1])[9:]) # OrganismIDf.write('\t')f.write(record.id)# ContigIDf.write('\t')f.write(str(t_cds.qualifiers["protein_id"])[2:-2])# Accession numberf.write("\n")except StopIteration as e:print("已经完成", path, "CDS内容的搜索")f.close()# 输入参数
if __name__ == "__main__":path = 'your_path'type = 'archaea/ bacteria'gbff_context = GbffContext(path, type)for gbff in gbff_context: print(gbff)CdsCoordinate(gbff, type)
总结
虽然代码效率很慢,but it works.继续苦逼的生信学习~
从NCBI 上下载 gbff 文件并得到 CDS 信息相关推荐
- C#实现从服务器上下载DLL文件
C#实现从服务器上下载DLL文件,具体代码如下: var fullQualifiedPathToDll = Server.MapPath("/") + "/bin/m ...
- 在github/gitlab上下载单个文件
在github/gitlab上下载单个文件 参考自:这里 mkdir mycode cd mycode git init git remote add -f origin xxx.git #xxx是要 ...
- 生物信息-学习从NCBI上下载数据
一.下载基因序列的数据 第一步:打开NCBI官网 https://www.ncbi.nlm.nih.gov/ 第二步:输入GSE10846(基因序列的编号)进行查询 点击进入 在该页面上滚动下滑至最底 ...
- github 下载单个文件夹_从Github上下载单个文件夹的快速方式
最近使用python需要从Github上下载文件,但官网上只能下载一个大目录下的所有文件,无法下载单个自己需要的文件夹. 网上主要的解决方式是SVN,有点麻烦没试. 尝试使用了Chrome的GitZi ...
- 苹果手机上下载的文件在哪里?
(图文无关) 昨天在微信收到一个大文件,73M,突然意识到,微信升级,终于冲过了30M的文件传输限制.接下来的问题,这是一个开发工程文件,要在电脑开发环境使用,怎么把这个文件传输到电脑? 正常的方式是 ...
- 从github上下载单个文件
一般情况下,在github中,需要下载整个项目时,可以点击右边的 clone or download 按钮 但是,当我们只需要某个项目当中的一个小文件时,找到所需下载的文件,选择RAW --点击右键- ...
- PC端QQ上下载的文件会在哪个文件夹下呢?
写这篇博客的起因是:在电脑没有联网的情况下,想找到从<顺利毕业everyone>群里下载的安装包PC,结果不知道QQ下载的文件在哪个文件夹下,于是百度了一下,涨知识了,就写一篇博客记录之. ...
- 用python从gbff文件中提取cds序列
首先,我们要了解一下什么是GBFF文件 GenBank纯文本文件格式(GenBank flatfile, 简称GBFF) GBFF是GenBank数据库的基本信息单位 GBFF序列文件由单个的序列条目 ...
- 如何在GitHub上下载开源文件
具体实现步骤 1 . 在本地安装Git,下载地址:点击下载 2 . 下载完成后开始安装,安装过程勾选下面内容: 1. Git Bash here 2. Git GUI here 然后一直点击next, ...
最新文章
- 2021年大数据ELK(二十一):Logstash简介和安装
- corrplot包绘制相关性图
- 收集Cocos2d提供的字体!共57种
- gridview中动态绑定通过模板列增加的textbox。
- python 异常分类_python的异常处理
- 【ABAP实例】SAP调用RESTful API测试用例
- 解决ansible报错“msg“: “Failed to import docker-py - cannot import name __version__.
- UNIGUI下载文件
- 打开Excel文件时出现提示:“向Excel发送命令时出现错误”解决方案
- Spark源码系列(五)分布式缓存
- 中职计算机优质课课件ppt,中职优质课 交集课件.ppt
- java中BorderLayout的使用方法
- python编写交互界面设计_第16 p,PYthon中的用户交互,Python GUI编程
- 古墓新手机器人_古墓新手任务攻略 - 玩家乐园 - 北大侠客行MUD论坛 - Powered by Discuz!...
- 背景图片轮播html代码,一款常见的背景图片轮播动效
- 弱电工程数据中心机房现状定位优化
- authentication failed : unrecognized kernel32 module. / NM
- 14、文件的上传和下载
- 微信公众号errcode大全
- 用php编写多项选择题_php 多选框问题(类似一道多选题)多选题的答案 以及正确答案都记录到数据库里了,读取修改问题...
热门文章
- git push报错,
- MatrikonOPC与欧姆龙PLC以太网通讯
- 3dmax:3dmax的软件右边栏常用修改器(Cloth修改器、车削、倒角/剖面、对称、FFD长方体/圆柱体、Gizmo、规格化样条线、挤出 、路径、扭曲、晶格、壳、拉伸)之详细攻略
- 腾讯会议共享屏幕播放PPT的时候可以实现只能在自己电脑上可以看到PPT的备注么?
- 有么有免费的logo生成器?大家看中的是哪款?
- SWMM WARNING警告02、03、04的检查修改
- SQLMAP插件tamper编写与使用
- 如何用计算机算出我喜欢你,如何用数字表白我喜欢你?
- 程序员快速成长的核心原则
- 常见的中间件有哪些?