1. 程式人生 > >批量從NCBI後臺下載指定資料的Perl指令碼

批量從NCBI後臺下載指定資料的Perl指令碼

最近需要在NCBI中下載所有Xanthomonas屬菌株對應的gbk檔案,由於NCBI前臺gbk資料已經改版,故打算從後臺ftp.ncbi.nlm.nih.gov下載。寫了個Perl指令碼用於批量下載NCBI後臺資料,有這方面需求的同仁們可以參考。另外,多程序暫時未成功,後期再更改。

#!/usr/bin/perl
##################################################################################################
# NCBI_ftp_batch_fetch.pl
# 黃良博 [email protected]
# 2015-3-25 # 用途:可用於在NCBI的後臺ftp.ncbi.nlm.nih.gov/genomes/Bacteria中下載某一個屬對應的檔案(gbk,fna,gbs,ptt等均可)。 # 下載Xanthomonas屬中所有菌株的gbk檔案和fna檔案: # perl $0 -g Xanthomonas -s gbk -s fna # 注意:多程序暫時不能使用 ################################################################################################## use v5.16; use warnings; use
Net::FTP; use Cwd; use Getopt::Long; use Parallel::ForkManager; my($genus,@suffix,$thread,$help); GetOptions( "genus:s" =>\$genus, "suffix:s" =>\@suffix, #"thread:i" =>\$thread, "help" =>\$help, ); #如果命令列上有多餘引數,則報錯並退出 if (@ARGV!=0){ say 'Please check your parameters, maybe you forgot to add "" or _ to genus'
; exit; } my $usage=<<USAGE; Please enter parameters! -help help -genus genus -suffix file type(eg. gbk,fna,ptt,...) -thread number of thread Usage: perl $0 -g genus -s suffix eg. perl $0 -g Xanthomonas -s gbk -s fna USAGE if ($help or not defined $genus or @suffix==0){ say "$usage"; exit(); } #---------------------------------------- my $host="ftp.ncbi.nlm.nih.gov"; my $directory="/genomes/Bacteria"; my ($newerr,$ftp,@files); $ftp=Net::FTP->new($host,Timeout=>240) or die "Can't ftp to $host: $!\n"; say "Connected"; $ftp->login("ftp","apl\@") or die "Can't login to $host: $!\n"; say "Getting file list..."; $ftp->cwd($directory) or die "Can't cd $!\n"; #建立下載目錄 my $restore_dir = "C:/Users/liangbo/Desktop/download"; #設定下載路徑 unless (-d $restore_dir){ mkdir $restore_dir, 0755 or die "Cannot make directory: $!"; } chdir $restore_dir; @files=$ftp->dir or die "Can't get file list $!\n"; say "Got file list"; #如路徑為Xanthomonas_oryzae_KACC_10331_uid58155 #利用qr在編譯時內插,提升效能 $genus=~s/\s+/_/g; my $regex=qr/($genus.*)/; my %count; #統計資訊 my $count_strains=0; my ($filename,$path); $thread||=0; #預設為單程序 my $pm=Parallel::ForkManager->new($thread); for(@files){ $pm->start and next; if(/$regex/){ $count_strains++; #統計找到的菌株數目 for my $ext (@suffix){ my $retrive="/genomes/Bacteria/$1/*.$ext"; my @file=$ftp->dir($retrive); for (@file){ if(/(\/genomes\/Bacteria\/(.*\.$ext))/){ ($filename,$path)=($2,$1); say $filename; #輸出找到的菌株 $count{$ext}{found}++; #統計找到的檔案數目 #download,注意此處對應的路徑為/genomes/Bacteria/Xanthomonas_.../*.gbk #將形如Xanthomonas_oryzae_KACC_10331_uid58155/NC_006834.gbk檔名改為 #Xanthomonas_oryzae_KACC_10331_uid58155_NC_006834.gbk,並以此命名 $filename=~s/\//_/g; $ftp->get($path,$filename) or die "get failed ", $ftp->message; $count{$ext}{got}++; #統計成功下載的檔案數目 } } } } $pm->finish; } $pm->wait_all_children; $ftp->quit; my $cwd=getcwd(); #輸出統計資訊 if($count_strains){ say "Found:"; say "Strains: $count_strains"; for my $ext (keys %count){ say "$ext files:"; for my $item (sort keys %{$count{$ext}}){ say "\t$item\t$count{$ext}{$item}"; } } say "Files downloaded in $cwd"; }else{ say "Attention: Nothing found, check your genus input!"; }

相關推薦

批量NCBI後臺下載指定資料Perl指令碼

最近需要在NCBI中下載所有Xanthomonas屬菌株對應的gbk檔案,由於NCBI前臺gbk資料已經改版,故打算從後臺ftp.ncbi.nlm.nih.gov下載。寫了個Perl指令碼用於批量下載NCBI後臺資料,有這方面需求的同仁們可以參考。另外,多程序暫

如何linux伺服器下載一個資料夾到windows電腦

網上看到這個帖子,覺得很實用,轉載儲存下載一個部署資料夾,到本地電腦 。兩步可搞定。1. 把資料夾打包 。tar -zcvf istester.com.gz istester.com/2. 把壓縮包下載下來。sz istester.com.gz注:1)如果linux伺服器沒有

通過git命令列github上下載指定branch的專案原始碼

不下載主線程式碼,只下載支線程式碼。  輸入命令:git clone -b 分支名 git地址 例如:主線是hydro-devel,我們想下載indigo-devel版本,命令如下:  git clone -b indigo-devel https://github.c

java web 伺服器上下載圖片資料

package com.Action; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import

c# DataTable中取得指定資料

從DataTable中取得指定資料 private int idx = 1000000; private int fndIdx = 0; private DataTable GetData( ) { fndIdx = int.Parse( textBo

Github上下載指定資料夾的方法

一般地,在Github上下載專案檔案只需要複製專案網址通過命令“git clone 網址”即可完成下載。 有的時候,我們並不需要整個專案檔案,而是隻需要下載其中的某個檔案或資料夾,可以利用SVN。SVN是基於檔案方式儲存的,Git是基於元資料方式分散式儲存檔案資訊的,它

Linux中find批量刪除空檔案及空資料指令碼

linux下批量刪除空檔案(大小等於0的檔案)的方法  程式碼如下 複製程式碼 find . -name "*" -type f -size 0c | xargs -n 1 rm -f 用這個還可以刪除指定大小的檔案,只要修改對應的 -size 引數就行

利用git github下載指定檔案或資料

1.在Config中允許使用Sparse Checkout模式: $git config core.sparsecheckout true 2.接下來你需要告訴Git哪些檔案或者資料夾是你真正想Check Out的,你可以將它們作為一個列表儲存在 .git/info/sp

MATLAB中批量txt檔案中讀取指定行的資料儲存為txt檔案

經常遇到,我們想要讀取的資料,不是從頭開始讀取的,我們往往要求從固定的行開始讀取,MATLAB程式碼如下: function readData() %從指定行開始讀取資料 readFilePat

如何NCBI下載SRA資料

1.找到需要的sra資料,找到對應的sample Accession,或者叫做:Experiment Accession。我在做的時候使用的是:Experiment Accession,因為用sample Accession,搜尋結果頁沒有對應的那個連結:2.開啟NCBI,

使用AsperaEBI或NCBI下載基因組資料

做基因組資料分析,可能經常從NCBI的GEO/SRA或者EBI的ENA資料庫下載高通量的資料,動輒幾十G的資料用wget下載實在太糾結,這時就要用到神器-Aspera了。 使用Aspera,最簡單的方法當然就是使用瀏覽器外掛Aspera Connect了,跟迅雷、Fla

ajax後臺請求的資料在顯示時一閃而過的原因(submit)

學習過程中遇到的問題: 先貼程式碼: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script> function showHint(str) { if (str.le

Centos6安裝圖形介面(hdp不需要,hdp直接github上下載資料即可)

CentOS 6.5 安裝圖形介面 安裝的時候沒有安裝影象介面。安裝步驟如下: 1.yum -y groupinstall Desktop 2.yum -y groupinstall "X Window System" 3.init 5 由字元介面切換到圖形介面可用兩種簡單方法實現: 1、在字元介面

java使用poi把資料庫中取出的資料寫入到excel檔案中並儲存到指定檔案路徑

  有時候我們要把從資料庫中取出的資料匯入到excel中,使取到的資料看起來更加的直觀和方便,在java中如何實現取到的資料匯入到excel中呢?以下就是使用poi工具吧資料寫入excel檔案中的解決方法: Excel表格副檔名有.xlsx和.xls兩種格式     &n

ECharts 後臺動態獲取資料 (asp.net)

(一) 使用工具 visual studio 2017;Web開發:asp.net (程式碼中的js引用路徑以及ajax方法呼叫的url,記得修改哦) (二) 準備工作(此處寫給和我一樣小白)   1.動態從後臺獲取資料,需使用Ajax獲取後臺Json,為此我們需要做一些準備工作,安裝兩個包(在vs的N

有時候後臺獲取的資料層次及比較多,導致修改vue的資料後沒有對dom進行重新渲染

解決辦法 vm.$forceUpdate() 示例: 迫使 Vue 例項重新渲染。注意它僅僅影響例項本身和插入插槽內容的子元件,而不是所有子元件。 methods: { selectInsurance(){ //重新整理可選狀態 for(var i=0; i<this.da

perl 呼叫rm -rf 遞迴刪除指定資料夾,提示 can not remove: not empty 原因

my $dir = "/root/syn/Design/test.txt"; open $fh_dir, "> $dir " or die"$!"; chdir "/root/syn/" or die "$!"; system "rm -rf Design"; 控制代碼鎖定

react 模擬後臺獲取選單資料,點選頂部選單切換介面的筆記

 本文是基於Ant design Pro 2.0做的筆記,官方提供的demo(官方demo下載地址),路由是程式配置的,不能滿足專案需求,所以在研究過程中,把所遇到的問題,做一個筆記,最終效果圖如下:   一:需求描述   1 從介面獲取選單,替換預設demo的選單。   &n

機器學習_利用python網上自動下載資料

機器學習一個必要的前提條件就是獲得大量資料,尤其對於我們剛開始接觸機器學習的時候,網上提供了大量開源資料來源,方便我們進行學習,但是這些資料來源會隨著時間變換,因此萌生一個自動下載資料的方法,剛好網上也有很多的方法,結合別的部落格主的方法和自己的理解寫了一個利用python自

Linux運維之批量下載指定網站的100個圖片檔案,並找出大於200KB的檔案

題目為:  有一百個圖片檔案,它們的地址都是 http://down.fengge.com/img/1.png http://down.fengge.com/img/2.png … 一直到 http://down.fengge.com/img/100.png 批量下載這10