NCBI批量下载基因组

说明

  • 使用Python 中的 ftplib从NCBI下载基因组。
  • 关于基因组的一些知识请参考之前的文章

待改进

  • 目前只能处理文件夹里面不包含文件夹的情况,如果还有文件夹,只会提醒。
  • 目前如果有多个版本的注释,默认下载的是第一个版本
  • 目前目的文件夹已经写在里面了E://,应该下载到当前路径。
  • 以上不足不影响下到最核心的序列文件。

前题

  1. 安装了 Python3
  2. 文件夹:
    1. *.txt 文件夹存放 GenBank accession No,一行一条,第一行不要为空行。
    2. 将以下内容粘贴到另外一个 txt 文件中,并修改后缀为 py

运行

双击 .py 文件。


#!/usr/bin/python
#author: W.-S. Zheng
#date 20180429
# -*- coding: UTF-8 -*-
#usage: download genomes from ncbi database

import glob
from ftplib import FTP
import os
import sys

# ------------------- 类和函数定义 -----------------------
class MyPathes:
    '''定义类储存当前路径,当前路径下的文件名,当前路径下的文件夹名'''

    def __init__(self, cur_path, ftp):
        self.cur = cur_path
        self.ftp = ftp
        self.folders = []
        self.files = []
        self.nextPathes = []
        self.links = []

        self.content = self.getContet()
        self.sort()
        self.createPathes()

    def getContet(self):
        dir_content = []
        self.ftp.cwd(self.cur)
        self.ftp.retrlines('LIST', callback = dir_content.append)
        return dir_content

    def sort(self):
        for line in self.content:
            if line.startswith('d'):
                self.folders.append(line.split(" ")[-1])
            elif line.startswith('l'):
                self.links.append(line.split(" ")[-1])
            else:
                self.files.append(line.split(" ")[-1])

    def oneDes(self):
        return(len(self.folders) == 1)

    def createPathes(self):
        for folder in self.folders:
            self.nextPathes.append(self.cur + '/' + folder)
        return(self.nextPathes)

# -------------------------下载 -----------------------------
# 转换accession no. 为路径
def acc2path(acc):
    root = '/genomes/all/GCA/'
    acc = acc.split('_')[1]
    acc = acc.split('.')[0]
    path = root + acc[0:3] + '/' + acc[3:6] + '/' + acc[6:9]
    return path

# 连接FTP
def con():
    ftp = FTP()
    ftp.connect("ftp.ncbi.nlm.nih.gov", 21)
    ftp.login()#连接的用户名,密码
    return(ftp)

# 下载文件
def downloadFile(filename):
    try:
        ftp.retrbinary("RETR " + filename, open(filename, 'wb').write)
    except FileExistsError:
        pass

# 下载文件夹
def downloadFolder(dir_folder):
    try:
        os.mkdir(dir_folder)
    except FileExistsError:
        print('File existed')
    os.chdir(dir_folder)

# 获得GenBank No.
# 存在同文件夹中,唯一的txt文件中
file = glob.glob('*.txt')
print(file)
accessions = open(file[0], 'r').readlines()
print(accessions)

# 逐个下载,适用于文件夹中不包括其他文件夹
for acc in accessions:
    os.chdir('E://')

    # 将No解析为路径
    root = acc2path(acc)
    print(root)

    # 连接FTP
    ftp = con()

    # 解析当前路径的内容
    x1 = MyPathes(root, ftp)

    # 进入要下载的文件夹
    # 如果不只一个版本提醒
    if not x1.oneDes():
        print("More than one version available!")

    else:
        # 连接FTP
        ftp = con()
        # 建立本地文件夹
        downloadFolder(x1.folders[0])
        # 进入下一级ftp目录
        x2 = MyPathes(x1.nextPathes[0], ftp)

        # 开始下载
        print('start!')
        prog = len(x2.files)
        for file in x2.files:
            downloadFile(file)
            sys.stdout.write("%i=" % (prog))
            sys.stdout.flush()
            prog = prog-1

        if not x2.nextPathes:
            print('Done')
        else:
            print('Must go deeper')

原文地址:https://www.cnblogs.com/Xeonilian/p/ncbi_python_ftplib_genome_download.html

时间: 2024-10-03 19:22:04

NCBI批量下载基因组的相关文章

<二代測序> 批量下载 NCBI sra 文件

本文近期更新地址: http://blog.csdn.net/tanzuozhev/article/details/51078460 前文 http://blog.csdn.net/tanzuozhev/article/details/51077222 介绍了如何採用 sra-toolkit 下载 sra 文件,可是假设你想下载整个项目的全部样本.应该如何批量下载呢.以下參考biostar站点的部分回帖.做简介. R语言 SRAdb 包 參考 https://www.biostars.org/p

Windows下使用explorer批量下载文件

背景: 客户的环境是Windows Server 2008 R2,需要每个月安装补丁,但出于安全考虑,将微软的自动更新封掉了,以至于每次安装补丁只能手动下载然后安装. 有时候每次需要下载的补丁均比较多,而服务器上有没有迅雷,QQ旋风等下载工具,也不允许安装,所以每次均手动下载,十分麻烦. ==================我是分割线======================= 此方法是通过系统自带的explorer来实现批量下载. 众所周知,当你在我的电脑中输入一个链接时,explorer会

看到个有趣的方法批量下载rtf模板

一般想要批量下载rtf模板我们都是用fndload来实现或者 perl download.pl来实现,今天看到一个比较有趣的方法 Hi, Blob column 'template file data' below is just what you want, open it in PLSQL-DEVELOPER and save it as a rtf file or you can write programs that work with 'BLOB' objects to export

Python 爬虫批量下载美剧 from 人人影视 HR-HDTV

本人比較喜欢看美剧.尤其喜欢人人影视上HR-HDTV 的 1024 分辨率的高清双字美剧,这里写了一个脚本来批量获得指定美剧的全部 HR-HDTV 的 ed2k下载链接.并依照先后顺序写入到文本文件,供下载工具进行批量下载.比方用迅雷.先打开迅雷,然后复制全部下载链接到剪切板,迅雷会监视剪切板来新建全部任务.假设迅雷没有自己主动监视,能够自己点击新建然后粘贴链接.Python源码例如以下.用的是Python3 : # python3 实现,以下的实例 3 部美剧爬完大概要 10 s import

Python批量下载百度贴吧贴子图片

批量下载贴吧里面某个贴子的所有图片,或者只下载某一页中的图片. #!/usr/bin/env python3 import re import urllib.request class DownTiebaImg: def __init__(self, url): self.url = url def getImgLinks(self): response = urllib.request.urlopen(self.url) pattern = re.compile(r'<img class=&quo

基于C#百度图片批量下载工具的实现

在家没网,无聊怎么办?不如来看点美女图片吧,网络快时批量下载,有空时慢慢看,嘿嘿,本人是个好人.于是这个工具的实现,那简直是迫在眉睫啊,来看看是怎么实现的吧. 先上图片吧: 这是软件的WinForm界面,基于C#实现. 上代码,也就100多行. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using Sys

python3.4爬虫批量下载音乐

最近在学习python,使用的版本为python3.4,开发环境为使用Pydev插件的eclipse.正好觉得http://www.dexiazai.com/?page_id=23上的音乐不错,决定使用python批量下载下来. 1.音乐地址 经过分析,页面嵌入的虾米播放器中的地址如下,后面以逗号分隔的字符为音乐的id,如音乐的地址为http://www.xiami.com/song/2088578 <span style="font-size:14px;"><spa

自己动手写工具:百度图片批量下载器

开篇:在某些场景下,我们想要对百度图片搜出来的东东进行保存,但是一个一个得下载保存不仅耗时而且费劲,有木有一种方法能够简化我们的工作量呢,让我们在离线模式下也能爽爽地浏览大量的美图呢?于是,我们想到了使用网络抓取去帮我们去下载图片,并且保存到我们设定的文件夹中,现在我们就来看看如何来设计开发一个这样的图片批量下载器. 一.关于网络抓取与爬虫 网络蜘蛛的主要作用是从Internet上不停地下载网络资源.它的基本实现思想就是通过一个或多个入口网址来获取更多的URL,然后通过对这些URL所指向的网络资

java文件批量上传、zip方式批量下载

WEB项目: 后台代码: 1 package com.achong.controller; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.FileOutputStream; 8 import java.io.IOException; 9 i