[BioRuby-ja] 複数ファイル順次読み込み
GOTO Naohisa
ngoto @ gen-info.osaka-u.ac.jp
2006年 12月 3日 (日) 08:58:20 UTC
ARGFは、Rubyインタプリタが予め用意している特別なファイルオブジェクトで、
コマンドライン引数に指定したファイルを簡単に読むためのものです。
Rubyのリファレンスマニュアルの説明
http://www.ruby-lang.org/ja/man/?cmd=view;name=ARGF
Bio::FlatFile.openの2番目の引数はファイル名またはファイルオブジェクトを取るので、
ファイル名の一覧をRubyの配列から取りたければ、
filenames = [ 'test1.fst', 'test2.fst', 'test3.fst' ]
filenames.each do |fn|
ff = Bio::FlatFile.open(Bio::GenBank, fn)
ff.each do |entry|
#処理内容
end
ff.close #closeするのを忘れずに!
end
みたいな感じでしょうか。
close忘れを根本的に予防したいなら、filenames.each の中の繰り返しを
Bio::FlatFile.open(Bio::GenBank, fn) do |ff|
ff.each do |entry|
#処理内容
end
end
のように、Bio::FlatFile#openにブロックを渡してください。
応用として、ファイルをコマンドラインから指定したければ、
filenames = ARGV
1行に1ファイル名ずつ書いたテキストファイルから指定するなら、
fllenames = File.readlines('list.txt').collect{|x| x.chomp}
# 注: この場合ファイル一覧を全部一気にメモリに読み込むので、
# ファイル数が数万個に達する場合は、別の方法のほうがよいです。
みたいな感じで。
On Sun, 3 Dec 2006 12:00:18 +0900
"Daiji Endoh" <dendoh @ zpost.plala.or.jp> wrote:
> 今、20個の複数(10-1000)のレコードを含むGenbankファイルをMySQLに取り込んで処
> 理しようとしております。
>
>
>
> ff=Bio::FlatFile.new(Bio::GenBank, ARGF)
>
> ff each_entry ….
>
>
>
> というチュートリアルにある方法で処理していますが、今後もファイル数が増えそう
> なので、ファイルのリストを配列かなにかで記録しておき、自動的に取り込むように
> したいのです。
>
>
>
> このARGFのところはオブジェクトと考え、
>
>
>
> filename=File.open(“hoge.gb”)
>
> filename=File.read(“hoge gb”)
>
>
>
> ff=Bio::FlatFile.new(Bio::GenBank, filename)
>
>
>
> としてみましたが、うまくいきません。
--
後藤 直久 ngoto @ gen-info.osaka-u.ac.jp
大阪大学微生物病研究所 遺伝情報実験センター ゲノム情報解析分野(安永研)
BioRuby-ja メーリングリストの案内