ncbi批量下载蛋白序列和基因序列

本文介绍了一种使用Python包ncbi-acc-download解决NCBI下载序列限制的方法,通过提供API-key加速下载速度,并利用多线程处理大量请求,适用于生物信息学分析中大规模序列下载的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ncbi虽然有提供批量下载蛋白序列和基因序列的方法,但是一次性最多好像只能下载300条序列, https://www.ncbi.nlm.nih.gov/sites/batchentrez,但是对于我们生信分析来说,有点不够用了,因为平时 可能需要下载几百、上千条序列;

在这里我就给各位提供个快速下载序列的方法:

首先在各位安装的python上安装一个包:ncbi-acc-download

这个包提供根据assession number来批量下载多条序列,如果各位想知道具体用法,可以--h看看功能,我这里就不具体阐述;

我这里举一个例子,用cazy网站下载的txt文件去ncbi批量下载序列:

我们这里可以看到总共需要300多万的序列;

如果去ncbi下载,得下到猴年马月去,所以果断使用python脚本来获取; 

import subprocess
from multiprocessing import Pool
import glob
import os

protein_set = set()
with open('cazy_data.txt', 'r') as fr:
    lines = fr.readlines()
    for line in lines:
        ncbi_protein = line.split('\t')[3].strip()
        protein_set.add(ncbi_protein)

def downlad_protein(i):
    run = f'ncbi-acc-download --format fasta --m protein {i} --api-key {api-key}'
    try:
        subprocess.run(run, shell=True)
        if os.path.exists(f'{i}.fa'):
            with open('cazy1.fasta', 'a') as outfile:
                with open(f'{i}.fa', 'r') as infile:
                    outfile.write(infile.read())
            subprocess.run(f'rm {i}.fa', shell=True)
    except subprocess.CalledProcessError as e:
        print(f"Error downloading {i}: {e}")



def multi_run_cmds():
    with Pool(processes = 10) as pool:
        results = [pool.apply_async(downlad_protein, (i,)) for i in protein_set]
        # 等待所有异步任务完成
        for result in results:
            result.get()
if __name__ == "__main__":
    multi_run_cmds()

这个脚本里有2点很重要,如果你们有需要可以自行修改:

1.api-key参数,这个参数是ncbi指定的,如果你不加这个参数,只能每秒获取3个,加了这个参数这个以后每秒可以获取10个;

2.我后面用了pool池来并行这个运行,因为需要300多万个,不并行得话,下载得太慢了,然后是10个线程并行得,你们可以根据自己需要修改。

这就是批量下载基因序列和蛋白序列得方法了,如果有啥问题,可以留言,我会及时回复得!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值