最近入门学习生信,面临的一个问题就是如何下载和预处理海量的基因组数据,尤其是 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 信息相关推荐

  1. C#实现从服务器上下载DLL文件

    C#实现从服务器上下载DLL文件,具体代码如下:   var fullQualifiedPathToDll = Server.MapPath("/") + "/bin/m ...

  2. 在github/gitlab上下载单个文件

    在github/gitlab上下载单个文件 参考自:这里 mkdir mycode cd mycode git init git remote add -f origin xxx.git #xxx是要 ...

  3. 生物信息-学习从NCBI上下载数据

    一.下载基因序列的数据 第一步:打开NCBI官网 https://www.ncbi.nlm.nih.gov/ 第二步:输入GSE10846(基因序列的编号)进行查询 点击进入 在该页面上滚动下滑至最底 ...

  4. github 下载单个文件夹_从Github上下载单个文件夹的快速方式

    最近使用python需要从Github上下载文件,但官网上只能下载一个大目录下的所有文件,无法下载单个自己需要的文件夹. 网上主要的解决方式是SVN,有点麻烦没试. 尝试使用了Chrome的GitZi ...

  5. 苹果手机上下载的文件在哪里?

    (图文无关) 昨天在微信收到一个大文件,73M,突然意识到,微信升级,终于冲过了30M的文件传输限制.接下来的问题,这是一个开发工程文件,要在电脑开发环境使用,怎么把这个文件传输到电脑? 正常的方式是 ...

  6. 从github上下载单个文件

    一般情况下,在github中,需要下载整个项目时,可以点击右边的 clone or download 按钮 但是,当我们只需要某个项目当中的一个小文件时,找到所需下载的文件,选择RAW --点击右键- ...

  7. PC端QQ上下载的文件会在哪个文件夹下呢?

    写这篇博客的起因是:在电脑没有联网的情况下,想找到从<顺利毕业everyone>群里下载的安装包PC,结果不知道QQ下载的文件在哪个文件夹下,于是百度了一下,涨知识了,就写一篇博客记录之. ...

  8. 用python从gbff文件中提取cds序列

    首先,我们要了解一下什么是GBFF文件 GenBank纯文本文件格式(GenBank flatfile, 简称GBFF) GBFF是GenBank数据库的基本信息单位 GBFF序列文件由单个的序列条目 ...

  9. 如何在GitHub上下载开源文件

    具体实现步骤 1 . 在本地安装Git,下载地址:点击下载 2 . 下载完成后开始安装,安装过程勾选下面内容: 1. Git Bash here 2. Git GUI here 然后一直点击next, ...

最新文章

  1. 2021年大数据ELK(二十一):Logstash简介和安装
  2. corrplot包绘制相关性图
  3. 收集Cocos2d提供的字体!共57种
  4. gridview中动态绑定通过模板列增加的textbox。
  5. python 异常分类_python的异常处理
  6. 【ABAP实例】SAP调用RESTful API测试用例
  7. 解决ansible报错“msg“: “Failed to import docker-py - cannot import name __version__.
  8. UNIGUI下载文件
  9. 打开Excel文件时出现提示:“向Excel发送命令时出现错误”解决方案
  10. Spark源码系列(五)分布式缓存
  11. 中职计算机优质课课件ppt,中职优质课 交集课件.ppt
  12. java中BorderLayout的使用方法
  13. python编写交互界面设计_第16 p,PYthon中的用户交互,Python GUI编程
  14. 古墓新手机器人_古墓新手任务攻略 - 玩家乐园 - 北大侠客行MUD论坛 - Powered by Discuz!...
  15. 背景图片轮播html代码,一款常见的背景图片轮播动效
  16. 弱电工程数据中心机房现状定位优化
  17. authentication failed : unrecognized kernel32 module. / NM
  18. 14、文件的上传和下载
  19. 微信公众号errcode大全
  20. 用php编写多项选择题_php 多选框问题(类似一道多选题)多选题的答案 以及正确答案都记录到数据库里了,读取修改问题...

热门文章

  1. git push报错,
  2. MatrikonOPC与欧姆龙PLC以太网通讯
  3. 3dmax:3dmax的软件右边栏常用修改器(Cloth修改器、车削、倒角/剖面、对称、FFD长方体/圆柱体、Gizmo、规格化样条线、挤出 、路径、扭曲、晶格、壳、拉伸)之详细攻略
  4. 腾讯会议共享屏幕播放PPT的时候可以实现只能在自己电脑上可以看到PPT的备注么?
  5. 有么有免费的logo生成器?大家看中的是哪款?
  6. SWMM WARNING警告02、03、04的检查修改
  7. SQLMAP插件tamper编写与使用
  8. 如何用计算机算出我喜欢你,如何用数字表白我喜欢你?
  9. 程序员快速成长的核心原则
  10. 常见的中间件有哪些?