【问题标题】:How do I create a CSV file using Perl?如何使用 Perl 创建 CSV 文件?
【发布时间】:2010-11-29 11:14:57
【问题描述】:

我想使用 Perl 创建一个 CSV 文件并向其中写入一些数据。有什么办法吗?

【问题讨论】:

    标签: perl csv


    【解决方案1】:

    你可以使用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

    【讨论】:

      【解决方案2】:

      我们通常使用Text::CSV_XS(上面提到的Class::CSV是基于它的)

      更新: 下面的评论者还建议使用Text::CSV,它将加载Text::CSV_XS,或者,如果这不可用,则使用没有XS 依赖的Text::CSV_PP,并且可能更容易安装。

      【讨论】:

      • 这是最好的选择。 Text::CSV_XS 经过高度优化,功能齐全,API 流畅。我们全部使用它。在我看来,作者也是对所有 CPAN 响应最快的人,他为该模块感到自豪并提供一流的支持。如果您无法为 _XS 进行编译,Text::CSV_PP 也是一个很好的后备方案,如果您以后需要它,那就太好了。如果您仅使用 Text::CSV,那么这些天就会发生正确的事情
      • 同意最后一句话:只要使用 Text::CSV,如果它可用,它将加载 Text::CSV_XS,如果系统没有 XS 版本,它将回退到 Text::CSV_PP已安装。
      • @szabgab 您能否提供一个在您的答案中使用 Text::CSV 创建 CSV 的示例?我正在阅读文档,它似乎非常专注于解析 CSV,不太清楚如何创建一个。
      【解决方案3】:

      有不止一种方法可以做到这一点。

      • 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。
      • 如果您有 简单的数据,正在拼凑在一起 一个简陋的一次性脚本 为您的电子表格格式化一些数据 消化、使用打印和加入 - 对预期寿命超过 2 小时的无代码执行此操作。
      • 如果你 想将一团数据转储到 CSV 或 XML 使用 Data::Tabular::Dumper::CSV。
      • 如果您正在编写需要稳定、可维护和快速的内容,并且需要最大程度地控制输入和输出,请使用 Text::CSV。 (注意 POE::Filter::CSV、Data::Tabular::Dumper::CSV 和 DBD::CSV 都使用 Text::CSV 或 Text::CSV_XS 作为后端处理)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-07
        • 1970-01-01
        • 2011-06-26
        • 1970-01-01
        • 1970-01-01
        • 2011-08-23
        相关资源
        最近更新 更多