读取嵌入换行符的 CSV 文件

2024-01-12

我正在处理从网站上抓取的文件,该文件保存为带有引号字段的分号 csv。 最后一个字段包含嵌入的换行符。 我一直在编写一个脚本来处理该文件。 我对 Perl 相当陌生,起初是用普通的 Perl 脚本尝试它,但很快发现它不起作用。 我做了研究,发现我应该使用 Text::CSV 模块。我发现这些网站解释了如何使用该模块:

http://perlmaven.com/how-to-read-a-csv-file-using-perl http://perlmaven.com/how-to-read-a-csv-file-using-perl

http://perlmeme.org/tutorials/parsing_csv.html http://perlmeme.org/tutorials/parsing_csv.html

http://metacpan.org/pod/Text::CSV#Embedded-newlines http://metacpan.org/pod/Text::CSV#Embedded-newlines

基本上我想要完成的是正确读取文件,以便所有字段都正确分隔,而不是在换行符处中断。然后从该字段中删除换行符并将其写入新文件。

这是原始数据的示例:

 "2030";"NH Amersfoort";"Stationsstraat 75";"3811 MH AMERSFOORT";"033-4221200";"www.nh-hotels.nl";"52.154316";"5.380036";"<UL class=stars><LI>
 <LI>
 <LI>
 <LI></LI></UL>"
 "2031";"NH Amsterdam Centre";"Stadhouderskade 7";"1054 ES AMSTERDAM";"020-6851351";"www.nh-hotels.com";"52.363075";"4.879458";"<UL class=stars><LI>
 <LI>
 <LI>
 <LI></LI></UL>"
 "2032";"NH Atlanta Rotterdam Hotel";"Aert van Nesstraat 4";"3012 CA ROTTERDAM";"010-2067800";"www.nh-hotels.com";"51.921028";"4.478619";"<UL class=stars><LI>
 <LI>
 <LI>
 <LI></LI></UL>" 

我想要的是这样的:

 "2030";"NH Amersfoort";"Stationsstraat 75";"3811 MH AMERSFOORT";"033-4221200";"www.nh-hotels.nl";"52.154316";"5.380036";"<UL class=stars><LI><LI><LI><LI></LI></UL>"
 "2031";"NH Amsterdam Centre";"Stadhouderskade 7";"1054 ES AMSTERDAM";"020-6851351";"www.nh-hotels.com";"52.363075";"4.879458";"<UL class=stars><LI><LI><LI><LI></LI></UL>"
 "2032";"NH Atlanta Rotterdam Hotel";"Aert van Nesstraat 4";"3012 CA ROTTERDAM";"010-2067800";"www.nh-hotels.com";"51.921028";"4.478619";"<UL class=stars><LI><LI><LI><LI></LI></UL>" 

这是到目前为止我的完整脚本。我已经尝试了 10 种不同的选项和建议,但它们都不起作用!

 use strict;
 use warnings;    
 use Text::CSV;

 my $inputfile  = shift || die "Give input and output names!\n";
 my $outputfile = shift || die "Give output name!\n";

 open my $infile,  '<', $inputfile   or die "Sourcefile in use / not found :$!\n";
 open my $outfile, '>', $outputfile  or die "Outputfile in use :$!\n";

    my $csv = Text::CSV->new ({
binary => 1,
sep_char => ';'
});

while (my $elements = $csv->getline( $infile )) {
        my $stars = $elements->[8];
        #$ster =~ s/[\r\n]//g
        print "$stars\n\n";
        }

 close $infile;
 close $outfile;

这会正确打印其中包含换行符的字段,但并未将其删除。我怎么做?使用正则表达式替换换行符不起作用。下一个问题是当我弄清楚如何清理该字段时。我如何打印新文件?


我不确定你在这里问什么,因为你似乎已经有了答案。但是,这段代码确实有效:

use strict;
use warnings;
use Text::CSV;

my $csv = Text::CSV->new ({
    binary => 1,
    sep_char => ';',
    eol => $/,                # to make $csv->print use newlines
    always_quote => 1,        # to keep your numbers quoted
});

while (my $row = $csv->getline( *DATA )) {
    $row->[8] =~ s/[\r\n]+//g;
    $csv->print(*STDOUT, $row);
}

__DATA__
"2030";"NH Amersfoort";"Stationsstraat 75";"3811 MH AMERSFOORT";"033-4221200";"www.nh-hotels.nl";"52.154316";"5.380036";"<UL class=stars><LI>
<LI>
<LI>
<LI></LI></UL>"
"2031";"NH Amsterdam Centre";"Stadhouderskade 7";"1054 ES AMSTERDAM";"020-6851351";"www.nh-hotels.com";"52.363075";"4.879458";"<UL class=stars><LI>
<LI>
<LI>
<LI></LI></UL>"
"2032";"NH Atlanta Rotterdam Hotel";"Aert van Nesstraat 4";"3012 CA ROTTERDAM";"010-2067800";"www.nh-hotels.com";"51.921028";"4.478619";"<UL class=stars><LI>
<LI>
<LI>
<LI></LI></UL>"

指针:

使用eol选项与Text::CSV的 print 使其执行您所期望的操作,即打印换行符。我用了STDOUT作为输出句柄,但您可以使用任何您想要的文件句柄。

我不知道你为什么说替换对你“不起作用”,但我怀疑你可能做了这样的事情:

my $foo = $row->[8];
$foo =~ s/[\r\n]//g;
print @$row;

这不会改变中的值$row,只是复制$foo.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取嵌入换行符的 CSV 文件 的相关文章

  • 如何在不加载到内存的情况下对大型 csv 文件进行排序

    我有 20GB csv 文件 如下所示 CallId MessageNo Information Number 1000 1 a 2 99 2 bs 3 1000 3 g 4 66 2 a 3 20 16 3 b 1000 7 c 4 99
  • 使用perl,在每行都有相同单词的情况下如何选择最后两行?

    Bini 21 89753 20 47853 20 27835 18 34952 16 23454 Bini 16 89753 14 47853 13 27835 12 34952 11 23454 Bini 10 09014 我的文件有一
  • XSLT:CSV(或平面文件或纯文本)到 XML

    我正在尝试使用 XSLT 将纯文本文件转换为 XML 文件 我从 CSV 文件开始 因为这是一种众所周知的文件格式 我可以开始在 Google 上搜索示例 我偶然发现了这一点 http ajwelch blogspot com 2007 0
  • Spark SQL如何读取压缩的csv文件?

    我尝试过使用apispark read csv读取带有扩展名的压缩 csv 文件bz or gzip 有效 但在源代码中我没有找到任何可以声明的选项参数codec type 即使在这个link https github com databr
  • 如何为不同的 Perl 应用程序安装专门的环境?

    就功能而言是否有与 Python 相同或接近的东西虚拟环境 http pypi python org pypi virtualenv what it does 但是对于 Perl 来说呢 我已经用 Python 进行了一些开发 并且将非系统
  • 使用 fgetcsv 循环遍历 csv

    我有一个包含 3 列的 csv 文件 电子邮件地址 名 and 姓 我已经到了可以使用以下代码打印数组的阶段 这会打印数组 因此每个字段都在一行中 我希望它打印的只是该行第一列中的值 这是如何完成的 关于 fgetcsv 的文档对我 相对初
  • Perl Tk 模块有哪些缺点?

    与在 Perl 中创建 GUI 的其他解决方案相比 Tk 模块有哪些缺点 我最近浏览了 Perl 的各种 gui 模块 这是我的总结 免责声明 最终我发现现有模块都不能满足我的需求 所以我开始编写自己的 gui 工具包 Tk 工作起来很不错
  • Perl 和 Unix 如何以相同的顺序对 Unicode 字符串进行排序?

    我正在尝试获取 Perl 和 GNU Linuxsort 1 程序就如何对 Unicode 字符串进行排序达成一致 我在跑sort with LANG en US UTF 8 在Perl程序中我尝试了以下方法 use Unicode Col
  • .NET“默认行终止符”?

    有什么方法可以弄清楚 NET 使用什么作为其 默认行终止符 例如 StringBuilder AppendLine String 的文档表示 附加指定字符串的副本 后跟默认行终止符 NET 中的几个与文本相关的类引用相同的概念 有什么方法可
  • 如何确保我的代码永远不会直接退出?

    eval require file subsequent code goes here If file包含一个exit语句 后面的代码就没有机会运行 如何解决以便后续代码始终有机会运行eval已经完成了 中止是不可能的exit call f
  • Android Excel CSV 的 MIME 数据类型是什么?

    我尝试了 text csv 甚至 application vnd ms excel 但 Excel 不会显示在选择列表中 很多其他应用程序也可以 void shareCsv Uri uri Context context Intent in
  • 从 csv 文件中读取奇数行

    这看起来相当简单 我只需要从 R 中的数据文件中读取奇数行并创建一个新的数据框 我怎样才能实现这个目标 read csv filename csv c TRUE FALSE 怎么运行的 功能read csv用于读取整个文件并返回包含所有行的
  • 在perl中调用基本构造函数

    从 Perl 中的类构造函数调用基本构造函数的正确方法是什么 我见过这样的语法 my class shift my a shift my b shift my self class gt SUPER new a b return self
  • grep 通过彩色文本,例如海湾合作委员会 |颜色gcc | grep 正则表达式

    在 grep 管道输出时 如何使 grep 尊重 ANSI 颜色转义 我很高兴使用其他东西 perl 而不是 grep 我的用户案例 我想要 gcc foobar c colorgcc grep regexp ls color grep f
  • 如何让 mod_perl 在更改时重新加载源文件?

    我正在开发一个带有 mod 的应用程序 perl 并在每次更改代码时重新启动服务器是一个巨大的阻力 我还是想用mod perl 用于开发 因为我计划将其用于实时服务器 我在文档中没有看到有关如何执行此操作的任何内容 想法 我认为 Apach
  • php将多维数组内爆为制表符分隔行

    我有一个多维数组 BlockData 其中有 13 个维度和 n 个数组元素 我需要将此数组内爆回单个长字符串 其中元素由 n 换行和尺寸由 t tabs 我尝试过使用array map 功能没有成功 需要帮助来完成此任务 请帮忙 这可以使
  • HTTP POST 操作出现错误代码 302

    我有一个 perl 脚本 它将数据发送到我用 php 编写的 Web 服务 这是代码 use LWP UserAgent my ua LWP UserAgent gt new my server endpoint http example
  • 使用Perl/DBI/MySQL/InnoDB查找外键信息

    我想以编程方式查找 MySQL 数据库中特定 InnoDB 表的外键 我正在使用 Perl 我偶然发现 dbh gt foreign key info 我刚刚尝试使用它 但似乎有点错误 它不会返回 ON DELETE 和 ON UPDATE
  • Perl 三元条件运算符

    我正在尝试在脚本中编写更高效的代码 并且有时会实现三元条件运算符 我不明白为什么在循环中使用三元条件运算符时会得到额外的结果 usr bin perl use strict use warnings my array Serial 123
  • 使用正则表达式提取两个短语之间的所有单词[重复]

    这个问题在这里已经有答案了 我正在尝试使用以下正则表达式提取两个短语之间的所有单词 b item W w W 0 2 1 one W w W 0 3 business b b item W w W 0 2 3 three W w W 0 3

随机推荐

  • 如何有效地将用户添加到 GitLab 中的所有项目(以编程方式或其他方式)

    我有一个包含许多项目的 GitLab CE 服务器 我想向所有项目添加用户 如果可能的话 我希望避免通过 UI 项目 gt 设置 gt 成员 gt 将用户添加到项目 来执行此操作 因为这将花费大量时间 实现此目的的一种方法是将所有项目移至一
  • XML 数据与命名空间的绑定

    我想使用 XML 文档的数据绑定来填充一个简单的表单 该表单显示有关人员列表的详细信息 我已经把一切都设置好了 现在就这样工作
  • 在设置和部署中预编译网站

    每次我使用安装和部署创建一个新的 Web 安装程序并运行它 在编辑属性中的所有好东西之后 输出始终是网站项目的副本 如何输出 WebSite 项目的预编译版本 我所做的是 发布网站 这样我就得到了预编译版本 将这个新的预编译网站作为现有网站
  • 在VBA中循环指定工作表

    我正在尝试使用我在这里找到的一些代码对于每个函数 循环遍历特定命名的工作表 https stackoverflow com questions 21761697 for each function to loop through speci
  • PyCharm 无法识别我的 Python 安装路径

    这是同样的问题this https stackoverflow com questions 23125024 rubymine doesnt recognize my ruby installation path否则 但为了Python 问
  • Babel 文件被复制而不进行转换

    我有这个代码 use strict import browserSync from browser sync import httpProxy from http proxy let proxy httpProxy createProxyS
  • 如何在Python中绘制悬挂根图?

    受此启发question https mathematica stackexchange com questions 120174 how to draw a hanging rootogram in mathematica 如何在 pyt
  • 如果下限大于上限,则创建空序列的序列构造

    不止一次体现R的 聪明 seq函数在极端情况下对我造成了严重的打击lower upper 1 gt 1 0 1 1 0 gt seq 1 0 1 1 0 gt seq 1 0 1 Error in seq default 1 0 1 wro
  • RethinkDB 如何生成自动 ID?

    我正在编写一个脚本 该脚本应该合并来自基于 SQL 的数据库的一些数据 每行都有一个长整数作为主键 增量 我正在考虑对这些 id 进行哈希处理 以便它们在某种程度上 看起来 像我的 RethinkDB 表中已有的其他 id 我在这里试图实现
  • 6 位整数的正则表达式不能是连续或重复的数字?

    我正在尝试获取一个正则表达式来检查以确保提供的 int 是 6 位数字 并且它不是连续的 也不包含所有重复数字 无论是升序还是降序 我并不关心正则表达式是否返回与不允许的数字的匹配 或者返回与允许的原始数字的匹配 例如 所有这些数字都是我需
  • Android 自动圆形图库

    我的图库小部件包含 1 10 张要滑动的图像 我知道当我在屏幕上进行条纹时 图像从左向右滚动 我想要自动循环图库在 10 后自动从第一张图像开始 有没有自动循环适配器或方法 final Gallery g Gallery findViewB
  • Scala XML 支持如何工作?

    我确信这应该是显而易见的 但我可以找到有关我的问题的任何参考资料 Scala XML 使用什么底层技术 它是类似 DOM 或 SAX 或 StAX 的东西吗 处理大型文档时我应该注意哪些性能损失 StAX 是否更高效 提前致谢 可以处理大文
  • CSS 变量名中允许使用句点吗?

    例如 我可以有一个名为如下的 css 变量 Button onHover 请注意 CSS 变量与 CSS 选择器不同 我必须解释这一点 因为有人将其标记为重复项 这是模块中的示例superfly css 变量 颜色 https github
  • 如何抛出不会终止我的程序的 IllegalArgumentException?

    好吧 我有一个带有 switch 语句的方法 但我省略了其余的情况 因为它们并不重要 在我的主要方法中 调用运算符方法并在 while 循环中传递参数 选择 直到他们选择 Q 当用户输入负数时 它应该抛出异常 打印一条消息 并忽略他们的输入
  • 在流畅的界面中实现条件

    我一直在尝试为我的系统中的一组规则实现一个流畅的界面 我想要完成的是这个 TicketRules RequireValidation When quartType gt quartType QuartType Before TotalMil
  • PHP奇怪的DOCUMENT_ROOT

    基本上 我正在编写一个框架 作为其功能的一部分 它应该为最终开发人员提供一组完善的 URI 路径 其中两条路径利用 SERVER DOCUMENT ROOT Absolute filesystem path to web root inst
  • 如何从 Jersey 的 ContainerRequest 中提取请求属性?

    HttpServletRequest有一个方法setAttribute String Object 我怎样才能从中提取这个属性ContainterRequest 我没有找到 getAttribute method Code public c
  • 创建 WooCommerce 自定义 API

    由于开箱即用的 WooCommerce REST API 中缺乏许多功能 我正在考虑创建一个 WooCommerce 端点 例如 付款 产品插件等 但我找不到任何可以开始的东西 也没有关于如何扩展 WooCommerce 以创建新端点的文档
  • 在调用 RunWorkerAsync 之后但在函数退出之前取消订阅 DoWork 是否安全?

    我有很多方法 虽然它们一次只运行一种 但它们都使用相同的RunWorkerCompleated and ProgressChanged方法 但它们都有不同的Dowork方法 执行以下操作是否安全 private void button Pr
  • 读取嵌入换行符的 CSV 文件

    我正在处理从网站上抓取的文件 该文件保存为带有引号字段的分号 csv 最后一个字段包含嵌入的换行符 我一直在编写一个脚本来处理该文件 我对 Perl 相当陌生 起初是用普通的 Perl 脚本尝试它 但很快发现它不起作用 我做了研究 发现我应