仅从 perl 列表中获取某些值

2024-01-21

首先我会描述我所拥有的,然后是问题。

我有一个这样构造的文本文件

----------- Start of file-----
<!-->
name,name2,ignore,name4,jojobjim,name3,name6,name9,pop
-->
<csv counter="1">
1,2,3,1,6,8,2,8,2,
2,6,5,1,5,8,7,7,9,
1,4,3,1,2,8,9,3,4,
4,1,6,1,5,6,5,2,9
</csv>
-------- END OF FILE-----------

我还有一个带有地图的 Perl 程序:

 my %column_mapping = (
"name" => 'name',
"name1" => 'name_1',
"name2" => 'name_2',
"name3" => 'name_3',
"name4" => 'name_4',
"name5" => 'name_5',
"name6" => 'name_6',
"name7" => 'name_7',
"name9" => 'name_9',
)

我的动态插入语句(假设我正确连接到数据库,并且 headers 是我的标头名称数组,例如 test1、test2 等)

my $sql = sprintf 'INSERT INTO tablename ( %s ) VALUES ( %s )',
    join( ',', map { $column_mapping{$_} } @headers ),
    join( ',', ('?') x scalar @headers ); 

my $sth = $dbh->prepare($sql);

现在对于我实际上遇到的问题: 我需要一种方法来仅对标题和地图中的值进行插入。 在作为示例给出的数据文件中,有几个名称不在地图中,有没有办法可以忽略它们以及 csv 部分中与它们关联的数字?

基本上是制作一个 csv 子集,将其变成:

name,name2,name4,name3,name6,name9,
 1,2,1,8,2,8,
 2,6,1,8,7,7,
 1,4,1,8,9,3,
 4,1,1,6,5,2,

这样我的插入语句只会插入地图中的内容。数据文件总是不同的,并且顺序不一样,地图中会有未知的数量。

理想情况下,这是一种有效的方法,因为该脚本将遍历数千个文件,并且每个文件都位于 csv 的数百万行和数百列之后。

它只是一个正在读取的文本文件,而不是 csv,不确定 csv 库是否可以在这种情况下工作。


您通常会将有效索引集放入列表中并使用数组切片 https://metacpan.org/pod/distribution/perl/pod/perldata.pod#Slices在那之后。

@valid = grep { defined($column_mapping{ $headers[$_] }) } 0 .. $#headers;

...

my $sql = sprintf 'INSERT INTO tablename ( %s ) VALUES ( %s )',
  join( ',', map { $column_mapping{$_} } @headers[@valid] ),
  join( ',', ('?') x scalar @valid);
my $sth = $dbh->prepare($sql);

...

my @row = split /,/, <INPUT>; 
$sth->execute( @row[@valid] );

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

仅从 perl 列表中获取某些值 的相关文章

  • 在 Perl 中查找数组的大小

    我似乎遇到过几种不同的方法来查找数组的大小 这三种方法有什么区别呢 my arr 2 print scalar arr First way to print array size print arr Second way to print
  • 降低计算精度以加快执行速度

    我有一个数据采集系统 可以进行几分钟的测量并生成一个包含 1000 万行和 10 列的 csv 文件 然后我在Python csv reader 中导入这个csv文件 对获取的数值数据执行一系列操作 但一次 只能 10000行 否则计算机内
  • 通过 Powershell 拆分 9 GB csv 文件时遇到问题

    我有一个大约 9 GB 的大型 csv 文件 在 Powershell 中 我需要将其拆分为 10 MB 的块 问题是我需要保持行完整 因此每个分割文件在一行的末尾结束 并在下一行的开头开始 由于文件太大 我需要一种拆分它的方法 该方法不会
  • 在 Perl 中实现 CLI 工具的最佳实践是什么?

    我正在使用 Perl 实现 CLI 工具 我们可以遵循哪些最佳实践 作为前言 我花了 3 年时间为一家大型金融公司设计并实现了一个相当复杂的 Perl 命令行工具集 以下想法基本上是我们团队设计指南的一部分 用户界面 命令行选项 允许尽可能
  • Python 将列表中的字符串转换为数字

    我遇到了以下错误消息 以 10 为基数的 int 的文字无效 2 2 外部用单引号括起来 内部用双引号括起来 该数据位于primes列出使用print primes 0 样本数据在primes list 2 3 5 7 The primes
  • 使用 sed 替换复杂模式

    我想使用 sed 命令替换模式 要删除的图案如下所示 带有一个空格 var 0xaae8 x6A x6F x69 x6E x72 x65 x76 x65 x72 x73 x65 x73 x70 x6C x69 x74 x3E x74 x70
  • 如何强制 Perl 按需重新编译使用“/o”编译的正则表达式?

    技术问题 给定一个正则表达式 my regEx qr whatever myVar oxi Notice o for compile once 强制重新编译的最有效方法是什么一经请求 例如 当我从程序逻辑中知道 myVar值改变 而不下降
  • Log4Perl 将多个程序的日志记录捆绑到一个日志中

    CPAN 上是否有任何 Logger 它允许我将多个程序的日志捆绑到一个文件中 并在两个程序同时运行并并行调用 log4Perl 时同步并行日志记录 背景是我使用一个自定义附加程序来写入电子邮件 我想将所有电子邮件捆绑在一个文件中作为备份
  • Perl:散列 2 中数组的数值排序(施瓦茨变换)

    这实际上是该线程的后续内容 Perl 散列中数组的数字排序 https stackoverflow com questions 7914931 perl numerical sort of arrays in a hash 我无法编辑原始问
  • 零垫重命名,例如图片 (2).jpg -> 图片 (002).jpg

    我需要按照标题在所有子文件夹中解释的方式重命名所有图像 我正在考虑用正则表达式提取括号内的数字 然后重命名它 搜索周围我看到有类似的工具rename and mmv但我无法让他们重新命名 jpg 我将不胜感激任何解决我的问题的建议 顺便说一
  • 如何查找字典值的长度

    我对这一切都很陌生 所以这可能是一个新手问题 但我正在寻找字典值的长度 但我不知道如何做到这一点 例如 d key hello brave morning sunset metaphysics 我想知道有什么办法可以找到len or 东西的
  • 如何仅读取 CSV 文件每行的第一列 [重复]

    这个问题在这里已经有答案了 如何在Python中读取CSV文件每行的第一列 我的数据是这样的 1 abc 2 bcd 3 cde 我只需要循环第一列的值 另外 当我在 calc 中打开 csv 文件时 每行中的数据都在同一个单元格中 这正常
  • 使用 ActivePerl 时为什么必须指定带有备份扩展的 -i 开关?

    除非我使用备份扩展指定它们 否则我无法就地编辑在 ActivePerl 下运行的 Perl 单行代码 C gt perl i ape splice F 2 0 q inserted text qq F n file1 txt Can t d
  • 如何在 Perl 中的不同包之间共享全局值?

    是否有一种标准方法可以对模块进行编码以保存要包含在每个其他包中的全局应用程序参数 例如 use Config 一个简单的包 只包含our变量 只读变量怎么样 已经有一个标准配置模块 http perldoc perl org Config
  • 哪些字符可以用作正则表达式分隔符?

    哪些字符可以用作 Perl 正则表达式的分隔符 m re m re and m re 一切似乎都有效 但我想知道所有可能性 From perlop http perldoc perl org perlop html 通过 m 您可以使用任意
  • “get”在 Perl 中不起作用

    我是 Perl 新手 在过去的几天里 我制作了一些简单的脚本 通过 get 将网站的源代码保存到我的计算机上 他们做了他们应该做的事情 但不会获得论坛网站的内容 非论坛网站工作得很好 知道发生了什么事吗 这是问题块 my url http
  • scipy.io.loadmat 嵌套结构(即字典)

    使用给定的例程 如何使用 scipy 加载 Matlab mat 文件 我无法访问更深的嵌套结构以将它们恢复到字典中 为了更详细地介绍我遇到的问题 我给出了以下玩具示例 load scipy io as spio a b c d 3 my
  • R 如何按行值进行分组、拆分或子集

    这是上一个问题的延续R 如何按行值分组 分裂 https stackoverflow com questions 64602607 r how to group by row value split 输入数据帧的变化是 id str c x
  • 在 R 中按邮政编码绘制美国地图上的点,并插入阿拉斯加和夏威夷

    我正在尝试以密度点格式在美国地图上绘制点 其中每个邮政编码的点的大小根据该邮政编码中从事某种职业的人数而定 我已经非常接近我需要的东西 但正在努力获取阿拉斯加和夏威夷的坐标 它们需要在插图上 这里的第一组代码是我所拥有的 loc full2
  • 未找到角度映射文件

    我刚刚下载了 angular min js 的新副本 并且在 angular min js map 上收到了 404 但我没有将其包含在我的代码中 Chrome 中的错误 GET http angular dev js angular mi

随机推荐

  • 将支持 bean 作为参数传递给 Facelet include

    我有一个可以在不同应用程序中使用的 Facelet 我不是要复制它 而是重复使用它 我需要传递将管理视图的支持 bean 作为参数 因为某些逻辑可能会根据使用它的应用程序而有所不同 我不想使用复合组件 而只是包含 Facelet 并指定哪个
  • Dojo,如何在 DIV 上执行 onclick 事件

    互联网上有一个淡出示例 http docs dojocampus org dojo fadeOut t tundra http docs dojocampus org dojo fadeOut t tundra 但我想做一些不同的事情 我希
  • 返回 PHP 多维数组中最后一个数组的元素

    如何在 PHP 中动态显示最后一个数组中的元素 例如 Array 0 gt Array id gt 6 user id gt 8 category path gt Sport 1 gt Array id gt 8 user id gt 8
  • syscall_thread_switch iOS 8.3 竞赛 - CocoaLumberjack bug?如何调试这个?

    我在我的应用程序中遇到了竞争条件 每当我暂停调试时 所有或除 1 个线程之外的所有线程都会卡在 syscall thread switch 上 它在模拟器上重现得更频繁 在 iPad Air 上也是如此 CocoaLumberjack 的
  • 从 Hibernate 4.3.6 迁移到 Hibernate 5

    我有一个旧项目 我使用 Java API 中的 Date 我想将其更改为新的 Java 8 Date APILocalDateTime 我读到 Hibernate 5 之前的版本不支持新的 Java 8 Date API 我决定从 Hibe
  • 原生 Vim 随机数脚本

    我知道有多种方法可以获取随机数 例如从 shell 中 然而 我在 Android 手机上运行 vim 几乎没有编译 而且 它不必是严格随机的 关键是 在 Vim 中获取一系列相当好的随机数的有趣 简洁 快速 即使用 vim 原生函数 或简
  • MS Access 2010 运行时 - 连续形式中缺少鼠标右键单击上下文菜单

    我在 MS Access 2003 中编写了一个应用程序 我可以使用 Access 2010 运行该应用程序 但是当我仅使用 MS Access 2010 运行时打开同一个 2003 应用程序时 我无法再以连续形式使用鼠标右键单击 因为我可
  • 向下转型最佳实践 (C++)

    静态代码分析工具往往会大量谈论 将基类向下转换为派生类 我还发现了一些编码标准指南 其中提到不要这样做 所以我想知道什么是最佳实践方法 这是我的用例 我有一个 Base 接口 DerivedA DerivedB 类 然后是一个包含 Base
  • 如何在codeigniter中使用pdo?

    据我所知 PDO 支持最近已添加到 codeigniter 但我找不到任何有关如何实际使用它的文档或教程 谁能告诉我如何使用它 您可以编辑 application config database php并启用 PDO 驱动程序 db def
  • Java中Float的最大值?

    下列question https stackoverflow com questions 3884793 minimum values and double min value in java表示 Double 的最小值是 Double M
  • QEMU和KVM在虚拟机I/O中扮演什么角色?

    我发现 QEMU 和 KVM 之间的界限非常模糊 我发现有人说虚拟机是qemu进程 而另一些人说是kvm进程 究竟是什么 而QEMU和KVM在虚拟机I O中扮演什么角色呢 比如一个vm做PIO MMIO的时候 是qemu还是kvm会把它困住
  • matplotlib:同一张图上有2个不同的图例

    我有一个图 其中不同的颜色用于不同的参数 不同的线条样式用于不同的算法 目的是比较使用相似参数执行的不同算法的结果 这意味着我总共使用了 4 种不同的颜色和 3 种不同的线条样式 在同一张图表上总共使用了 12 个图 我实际上是根据颜色构建
  • 带有 CSS 波浪的动画文本

    怎么运行的 The png下面显示的图像被剪辑到带有动画的文本中 行动中 body background 000000 Wave Loader text transform uppercase font family Cabin Conde
  • 如何通过 SSH 协议克隆 Github Gist?

    Github 似乎确实希望我们使用 HTTPS 协议来使用 Gists 例如 他们只在 Gist 页面上列出 HTTPS url 例如https gist github com donatello 5834862 https gist gi
  • 从 Microsoft SQL 查询到 Pandas Dataframe

    我正在尝试用 Python3 编写一个程序 它将在 Microsoft SQL 中的表上运行查询并将结果放入 Pandas DataFrame 中 我的第一次尝试是下面的代码 但由于某种原因 我不明白这些列没有按照我在查询中运行它们的顺序出
  • iOS 上的 HTML5 MSE

    我正在尝试使用 Chrome Mobile 让 hls js 在 iOS 上工作 但我注意到 Chrome Mobile 不支持 MediaSourceExtensions 这绝对是必要的 iOS 是否支持 MSE Chrome 移动版 F
  • watchdog(python) - 仅监视一种文件格式并忽略“PatternMatchingEventHandler”中的所有其他内容

    我正在运行代码本文 https www thepythoncorner com 2019 01 how to create a watchdog in python to look for filesystem changes 并进行了一些
  • 设置Jest和Enzyme来测试React 15找不到模块react/lib/ReactTestUtils

    我有一个反应项目 正在尝试设置一些测试 由于以下设置指南 问题 https github com facebook jest issues 1353 https github com facebook jest issues 1353 ht
  • 对指定月份和年份的数据框进行子集化

    我有一个数据框 其中第一列是 d m y 格式的日期 第二列是数值 销售额 我想为一年中的每个月创建子集 例如 11 11 12 11 等 我尝试了这个答案中建议的代码 使用多个条件对 data frame 进行子集化 https stac
  • 仅从 perl 列表中获取某些值

    首先我会描述我所拥有的 然后是问题 我有一个这样构造的文本文件 Start of file name name2 ignore name4 jojobjim name3 name6 name9 pop gt