Drkcore

17 12 2006 perl Tweet

Text::CSV::Simple::WithHeader

Text::CSV::Simpleはフィールドを指定してやるとCSV読み込むときにハッシュにしてくれるので DBD::CSVとかDBD::AnyDataよりも便利じゃないかと、こっちばっか使うようになってしまったのだが、Text::CSV::SimpleはCSVにありがちなヘッダー付きのcsvをうまく処理してくれない

仕方ないので、

$parser->field_map(qw/id name null town/);
my @data = $parser->read_file($datafile);
shift @data;

と、フィールド指定をして、ハッシュで受け取ってから、ヘッダーの行(最初の行)をshiftして落とすという処理をさせてた。でも、これだとフィールドが100とか200とかあるとfield_map書くのが面倒でたまらんので、ヘッダー処理するようにしてみた。

こんな感じのヘッダー付きのcsvを用意したら、

name,address,etc
kz,tokyo,1
yu,kyoto,2
ha,mie,3

いつものように、Text::CSV::Simpleのノリで

use strict;
use Text::CSV::Simple::WithHeader;
use Data::Dumper;
my $datafile = "data/test.csv";

  my $parser = Text::CSV::Simple::WithHeader->new;
  my @data = $parser->read_file($datafile);
  print Dumper(\@data);

ちゃんとハッシュになって返ってくる。

$VAR1 = [
          {
            'name' => 'kz',
            'address' => 'tokyo',
            'etc' => '1'
          },
          {
            'name' => 'yu',
            'address' => 'kyoto',
            'etc' => '2'
          },
          {
            'name' => 'ha',
            'address' => 'mie',
            'etc' => '3'
          }
        ];

Text::CSV::Simple::WithHeaderに置いておいたがwant_fieldsには対応させてない。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021