如何使用Perl创建CSV文件?

时间:2009-09-18 11:55:45

标签: perl csv

我想使用Perl创建一个CSV文件并向其写入一些数据。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:25)

您可以使用Class:CSV

use Class::CSV;

my $csv = Class::CSV->new(
  fields         => [qw/userid username/]
);

$csv->add_line([2063, 'testuser']);
$csv->add_line({
  userid   => 2064,
  username => 'testuser2'
});

$csv->print();

# 2063,testuser
# 2064,testuser2

修改:有关更多库,您可以search CPAN

答案 1 :(得分:18)

我们通常使用Text::CSV_XS(上述Class::CSV所基于的)

更新:下面的评论者还建议使用Text::CSV加载Text::CSV_XS,如果不可用,请回到Text::CSV_PP,而不是{{3}}具有XS依赖性,可能更容易安装。

答案 2 :(得分:12)

有多种方法可以做到。

  • DBD::CSV - 使用SQL读取和写入CSV文件。
  • Text::CSV - 一次构建并解析一行CSV文件。这几乎是CSV操作的黄金标准。
  • POE::Filter::CSV - 为您的POE组件IO提供CSV过滤器。
  • Data::Tabular::Dumper::CSV - 将表格直接转储到CSV文件中(具有相同界面的对象可以转储到XML或MS Excel文件)。

CPAN上还有很多其他人。

当然,您可以忽略所有这些,只需使用循环,连接和打印:

my @table = (
  [ 'a', 'b', 'c'],
  [  1,   2,   3 ],
  [  2,   4,   6 ],
);

for my $row ( @table ) {
    print join( ',', @$row ), "\n";
}

只需运行脚本并将输出重定向到文件即可!你完成了或者你可能会疯狂并open一个文件句柄,并直接打印到文件。

但是你不会处理多行字段,嵌入式逗号,或任何可以在这种数据处理任务中弹出的其他奇怪的东西。所以要小心这种方法。

我的建议:

  • 如果您正在构建POE 应用程序,使用POE :: Filter。
  • 如果你是一个SQL / DBI怪物并梦想着 SQL,或者可能需要替换CSV 用真实数据库输出 连接,使用DBD :: SQL。
  • 如果有的话 简单的数据和正在拼凑在一起 一个邋little的小小的扔掉剧本 格式化电子表格的一些数据 消化,使用打印和连接 - 这样做是为了没有代码,预期寿命超过2小时。
  • 如果你 想把一大块数据转储成一个 CSV或XML使用 数据::表格::自卸车:: CSV。
  • 如果您正在编写需要稳定,可维护且快速的内容,并且您需要对输入和输出进行最大程度的控制,请使用Text :: CSV。 (注意,POE :: Filter :: CSV,Data :: Tabular :: Dumper :: CSV和DBD :: CSV都使用Text :: CSV或Text :: CSV_XS作为后端处理。)