首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ncbi下载多个fasta文件

从ncbi下载多个fasta文件
EN

Stack Overflow用户
提问于 2016-02-20 15:11:29
回答 2查看 1.3K关注 0票数 0

我正在试着从ncbi下载所有与一个有机体相关的fasta文件。

我尝试使用wget -r -l3 -A "*.fna.gz" ftp://ftp.ncbi.nlm.nih.gov/genomes/refseq/bacteria/Microcystis_aeruginosa/从第三级开始获取所有以.fna.gz结尾的文件,但随后它拒绝了所有具有以下输出的文件:

已删除“ftp.ncbi.nlm.nih.gov/genomes/refseq/bacteria/Microcystis_aeruginosa/latest_assembly_versions/.listing”.拒绝“GCF_000010625.1_ASM1062v1”。拒绝“GCF_000307995.1_ASM30799v2”。拒绝“GCF_000312165.1_ASM31216v1”。拒绝“GCF_000312185.1_ASM31218v1”。拒绝“GCF_000312205.1_ASM31220v1”。拒绝“GCF_000312225.1_ASM31222v1”。拒绝“GCF_000312245.1_ASM31224v1”。拒绝“GCF_000312265.1_ASM31226v1”。拒绝“GCF_000312285.1_ASM31228v1”。拒绝“GCF_000312725.1_ASM31272v1”。拒绝“GCF_000330925.1_MicAerT1.0”。拒绝“GCF_000332585.1_MicAerD1.0”。拒绝“GCF_000412595.1_spc777-v1”。拒绝“GCF_000599945.1_Mic70051.0”。拒绝“GCF_000787675.1_ASM78767v1”。拒绝“GCF_000981785.1_ASM98178v1”。

你知道为什么它会拒绝这些目录吗?谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2016-02-23 14:55:40

不知道为什么它会拒绝你的请求,但当我还在做这种类型的事情时,我发现如果我不以较小的批次下载查询,NCBI服务器会超时并阻止我的IP一段时间,然后我才能再次下载。这似乎不是你所看到的问题,但也许这个脚本可能会完成同样的事情。如果这有帮助,请告诉我。

代码语言:javascript
复制
#!/usr/bin/env python

from Bio import Entrez

search_term = raw_input("Organism name: ")

Entrez.email = "your_email@isp.com"   # required by NCBI
search_handle = Entrez.esearch(db="nucleotide", term=search_term, usehistory="y")
search_results = Entrez.read(search_handle)
search_handle.close()

gi_list = search_results["IdList"]
count = int(search_results["Count"])
webenv = search_results["WebEnv"]
query_key = search_results["QueryKey"]

batch_size = 5    # download sequences in batches so NCBI doesn't time you out

with open("ALL_SEQ.fasta", "w") as out_handle:
    for start in range(0, count, batch_size):
        end = min(count, start+batch_size)
        print "Going to download record %i to %i" % (start+1, end)
        fetch_handle = Entrez.efetch(db="nucleotide", rettype="fasta", retmode="text",retstart=start, retmax=batch_size, webenv=webenv, query_key=query_key)
        data = fetch_handle.read()
        fetch_handle.close()
        out_handle.write(data)

print ("\nDownload completed")
票数 0
EN

Stack Overflow用户

发布于 2016-02-25 03:58:18

我发现了一个perl脚本,它使我能够在here中完成这项任务。不幸的是,这个脚本只是返回基因组的ID,而不是实际的序列。

例如,我的输出的头部是:

gi|425458296|ref|NZ_CAIN00000000.1|NZ_CAIN01000000

铜绿微囊藻PCC9808,全基因组鸟枪测序项目

gi|425448636|ref|NZ_CAIK00000000.1|NZ_CAIK01000000铜绿微囊藻PCC7941,全基因组鸟枪测序项目

有没有perl用户知道发生了什么?

代码语言:javascript
复制
use strict;
use LWP::Simple;
my ($name, $outname, $url, $xml, $out, $count, $query_key, $webenv, $ids);
my @genomeId;
my $base = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/';
my $limit = 'wgs[prop]+AND+srcdb+refseq[prop])';
my @species = ('Microcystis aeruginosa');

foreach my $s (@species) {
  undef @genomeId;
  $query_key = $webenv = '';
  $s =~ s/ /+/g;

  # ESearch
  $url = $base . "esearch.fcgi?db=genome&term=$s";
  $xml = get($url);
  $count = $1 if ($xml =~ /<Count>(\d+)<\/Count>/);

  if ($count > 30) {
    $url = $base . "esearch.fcgi?db=genome&term=$s&retmax=$count";
    $xml = get($url);
  }

  while ($xml =~ /<Id>(\d+?)<\/Id>/gs) {
    push(@genomeId, $1);
  }

  $ids = join(',', @genomeId);

  # ELink
  $url = $base . "elink.fcgidbfrom=genome&db=nuccore&cmd=neighbor_history&id=$ids&term=$limit";
  $xml = get($url);
  $query_key = $1 if ($xml =~ /<QueryKey>(\d+)<\/QueryKey>/);
  $webenv = $1 if ($xml =~ /<WebEnv>(\S+)<\/WebEnv>/);

  # EFetch
  $url = $base . "efetch.fcgidb=nuccore&query_key=$query_key&WebEnv=$webenv&rettype=fasta&retmode=text";
  $out = get($url);

  open (OUT, ">$s.fna");
  close OUT; 
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35520291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档