如何使用 Perl 创建 CSV 文件?
Posted
技术标签:
【中文标题】如何使用 Perl 创建 CSV 文件?【英文标题】:How do I create a CSV file using Perl? 【发布时间】:2010-11-29 11:14:57 【问题描述】:我想使用 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 作为后端处理)。【讨论】:
以上是关于如何使用 Perl 创建 CSV 文件?的主要内容,如果未能解决你的问题,请参考以下文章