批量從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,
使用Aspera從EBI或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