在 perl 中使用 TEXT::CSV_XS 模块将 CSV 文件转换为哈希结构

     2023-03-24     253

关键词:

【中文标题】在 perl 中使用 TEXT::CSV_XS 模块将 CSV 文件转换为哈希结构【英文标题】:To Convert CSV File to Hash Structure using TEXT::CSV_XS Module in perl 【发布时间】:2020-09-21 10:40:50 【问题描述】:

下面的代码用于读取 csv 文件并转换为哈希。键取决于用户需要的键列数。

use warnings;
use strict;

my %hash;     
my $KeyCols = 2;
while (<DATA>) 
    chomp;
    my @cols = split /,/, $_, $KeyCols+1;
    next unless @cols > $KeyCols;
    my $v = pop @cols;
    my $k = join '', @cols;
    $hash$k = $v;

为了提高效率,我需要帮助才能使用 TEXT::CSV_XS 包实现相同的逻辑。请帮忙。

【问题讨论】:

Text::CSV_XS 将为您做的是split ... 行,但正确地不管许多可能的“有趣”情况,也许更快 --- 你需要的是最基本的使用它,一旦你有了@cols,你就可以用它做任何你想做的事。因此,只需打开文档,查看概要,然后尝试一下。 (那么这里也有很多关于它的帖子) 【参考方案1】:

使用 Text::CSV_XS 的真正原因是为了正确。它不会比你拥有的更快,但它会在你失败的地方工作。

use Text::CSV_XS qw( );

my $csv = Text::CSV_XS->new(
    auto_diag => 2,
    binary    => 1,
);

my %hash;
while ( my $row = $csv->getline(\*DATA) )  
   $hash $row->[0] . $row->[1]  = $row;

直接将字段连接在一起(没有分隔符)似乎很奇怪。

以上内容使值成为字段数组而不是 CSV。如果您想要原始格式的 CSV,则需要将它们重新编码为 CSV。

my %hash;
while ( my $row = $csv->getline(\*DATA) )  
   my ($k1, $k2) = splice(@$row, 0, 2);
   $csv->combine(@$row);
   $hash $k1 . $k2  = $csv->string();

【讨论】:

如何从 Perl 快速访问许多大型 CSV 文件中的数据?

...目前从一些.CSV文件中读取大量数据。为了提高效率,我使用Text::CSV_XS模块将它们读入,然后使用其中一列作为索引创建散列。但是,我有很多很多文件,而且它们都很大。每个脚本都 查看详情

使用 perl 循环中的变量在 perl 循环中运行 shell 命令

】使用perl循环中的变量在perl循环中运行shell命令【英文标题】:Runningashellcommandinaperlloop,usingavariablefromtheperlloop【发布时间】:2016-06-0320:21:43【问题描述】:我需要在perl脚本中运行一个shell命令(它必须是一个shell命令),但我... 查看详情

如何在 JavaScript 中使用模运算符 (%)? [复制]

】如何在JavaScript中使用模运算符(%)?[复制]【英文标题】:HowcanIusemodulooperator(%)inJavaScript?[duplicate]【发布时间】:2013-05-0612:19:19【问题描述】:如何在JavaScript项目的数字计算中使用模运算符(%)?【问题讨论】:【参考方案1】:... 查看详情

在 Perl 中使用 require

】在Perl中使用require【英文标题】:useofrequireinPerl【发布时间】:2021-12-0715:54:24【问题描述】:我尝试在我的代码中多次使用require,但我可以运行一次。if($value=~"test")require"mycode1.pm";#Executeperfectif($value=~"code")require"mycode1.pm";#Notexec... 查看详情

如何在 SQL 脚本中使用 Perl 变量(使用反引号)

】如何在SQL脚本中使用Perl变量(使用反引号)【英文标题】:HowtouseaPerlvariableinaSQLscript(usingbackticks)【发布时间】:2014-06-2719:52:17【问题描述】:我见过各种例子,但我无法使用DBI。如何在外部sql脚本中使用perl变量?例如,我想... 查看详情

如何在 Javascript 中使用 perl 中的时间戳?

】如何在Javascript中使用perl中的时间戳?【英文标题】:HowtousetimestampfromperlinJavascript?【发布时间】:2018-12-2615:11:44【问题描述】:在我的后端(用Perl编写)中,我生成了一个结束日期。在前端,我想计算此结束日期之前的剩余... 查看详情

在 codechef 和 spoj 问题中使用模 10^9+7 的意义是啥?

】在codechef和spoj问题中使用模10^9+7的意义是啥?【英文标题】:whatisthesignificanceofmodulo10^9+7usedincodechefandspojproblems?在codechef和spoj问题中使用模10^9+7的意义是什么?【发布时间】:2014-09-0515:23:56【问题描述】:我正在研究aproblem,... 查看详情

如何在 bash shell 脚本中的 perl 命令调用中使用 shell 变量?

】如何在bashshell脚本中的perl命令调用中使用shell变量?【英文标题】:Howtouseshellvariablesinperlcommandcallinabashshellscript?【发布时间】:2012-10-1702:52:04【问题描述】:如何在bashshell脚本的perl命令调用中使用shell变量?我的shell脚本中有... 查看详情

如何在 Perl 中使用 SWIG?

】如何在Perl中使用SWIG?【英文标题】:HowdoIuseSWIGinPerl?【发布时间】:2010-09-1005:13:38【问题描述】:我对SWIG接口以及如何将其与C和Perl一起使用是全新的。如果有人解释如何使用Perl和C和SWIG,这对我会有很大帮助。【问题讨论... 查看详情

如何在 VBA 中使用 Excel 的内置模函数 (MOD)?

】如何在VBA中使用Excel的内置模函数(MOD)?【英文标题】:HowdoIuseExcel\'sbuilt-inmodulofunction(MOD)inVBA?【发布时间】:2018-12-0622:26:56【问题描述】:我的问题与thispost有些相关。但是,假设我想在VBA中使用Excel的内置MOD(模)函数。Thiss... 查看详情

如何在 Perl 中跳出循环?

...】:2010-09-2303:00:09【问题描述】:我正在尝试在for循环中使用break语句,但由于我也在我的Perl代码中使用严格的subs,所以我收到一条错误消息:不允许使用裸词“break”./final.pl中使用的“严格潜艇”第154行。是否有解决方法(... 查看详情

在 Perl 中使用 nohup 时如何抑制系统输出?

】在Perl中使用nohup时如何抑制系统输出?【英文标题】:HowcanIsuppresssystemoutputwhenusingnohupfromPerl?【发布时间】:2010-10-0300:19:18【问题描述】:在Perl中,我使用nohup命令启动一个进程。命令如下:system("nohupmyprocpe88&");这工作正常... 查看详情

在 Perl 中如何使用变量作为哈希键?

】在Perl中如何使用变量作为哈希键?【英文标题】:HowDoesOneUseaVariableasaHashKeyinPerl?【发布时间】:2011-09-1217:51:05【问题描述】:我一直在努力将变量作为变量分配给Perl中的键。我想要做的是提示用户输入要保存在变量中的值,... 查看详情

在 perl 中使用 inotify 监视多个文件

】在perl中使用inotify监视多个文件【英文标题】:Watchingmultiplefileswithinotifyinperl【发布时间】:2011-03-1518:18:05【问题描述】:我需要在Perl中查看多个文件,并且我正在使用Linux::Inotify2。但是我遇到了一个问题,即需要修改并点击... 查看详情

如何在 Perl 中使用布尔变量?

】如何在Perl中使用布尔变量?【英文标题】:HowdoIusebooleanvariablesinPerl?【发布时间】:2010-11-0509:36:18【问题描述】:我试过了:$var=false;$var=FALSE;$var=False;这些都不起作用。我收到错误消息使用“strictsubs”时不允许使用裸词“false... 查看详情

如何在 Perl 中使用“打包/解包”?

】如何在Perl中使用“打包/解包”?【英文标题】:HowdoIuse"pack/unpack"inPerl?【发布时间】:2011-12-2723:36:16【问题描述】:当我使用Ruby语言解析数据时,我的数据被编码为64位网络字节顺序,如下所示:defunpack_string(str)binary=... 查看详情

使用反引号在 perl 脚本中获取核心文件

】使用反引号在perl脚本中获取核心文件【英文标题】:getthecorefileinperlscriptwithbacktick【发布时间】:2020-03-0717:47:52【问题描述】:在我的ubuntu14.04(Linux3.19.064bit)PC上,我运行了一个perl程序,该程序在循环中包含以下内容$params=setup... 查看详情

使用 perl 在 MIME 中解码附件时出错

】使用perl在MIME中解码附件时出错【英文标题】:ErrorindecodingattachmentinMIMEusingperl【发布时间】:2013-07-1505:32:13【问题描述】:我在perl中编写了一个脚本来制作附加图像的多部分MIME消息,这里是脚本useMIME::Parser;useFileHandle;$ffh=FileH... 查看详情