[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 メーリングリストの案内