如何使用 Ruby 从 CSV 中删除行

2023-11-24

给定以下 CSV 文件,如何删除“foo”列中包含单词“true”的所有行?

Date,foo,bar
2014/10/31,true,derp
2014/10/31,false,derp

我有一个可行的解决方案,但它需要创建一个辅助 CSV 对象csv_no_foo

@csv = CSV.read(@csvfile, headers: true) #http://bit.ly/1mSlqfA
@headers = CSV.open(@csvfile,'r', :headers => true).read.headers

# Make a new CSV
@csv_no_foo = CSV.new(@headers)

@csv.each do |row|
  # puts row[5]
  if row[@headersHash['foo']] == 'false'
    @csv_no_foo.add_row(row)
  else
    puts "not pushing row #{row}"
  end
end

理想情况下,我会从 CSV 中删除有问题的行,如下所示:

...
 if row[@headersHash['foo']] == 'false'
    @csv.delete(true) #Doesn't work
...

查看 ruby​​ 文档,它看起来像row类有一个delete_if功能。我对该函数所需的语法感到困惑。有没有办法在不创建新的 csv 对象的情况下删除行?

http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Row.html#method-i-each


你应该能够使用CSV::Table#delete_if,但你需要使用CSV::table代替CSV::read,因为前者会给你一个 CSV::Table 对象,而后者会产生一个数组的数组。请注意,此设置还将标题转换为符号。

table = CSV.table(@csvfile)

table.delete_if do |row|
  row[:foo] == 'true'
end

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

如何使用 Ruby 从 CSV 中删除行 的相关文章

随机推荐

  • 使用@@identity而不是scope_identity的原因

    在 SQL Server 2005 数据库上 我们的一位远程开发人员刚刚签入了对存储过程的更改 该更改将 select scope identity 更改为 select identity 您知道为什么要使用 identity 而不是sco
  • CUDA:CPU 定时器和 CUDA 定时器事件之间的区别?

    使用 a 有什么区别CPU定时器和CUDA定时器事件测量执行某些 CUDA 代码所需的时间 CUDA 程序员应该使用其中哪一个 为什么 我知道的 CPU定时器使用将涉及调用cudaThreadSynchronize在任何时间被记录之前 为了
  • Ipython 可以在命令提示符下运行,但不能在浏览器中运行

    我使用的是 Windows 8 64 位笔记本电脑 我的电脑上已经安装了 python 2 7 所以我使用 easy install 安装了 Ipython 我现在可以在 C Python27 Scripts 中看到 ipython 应用程
  • 在 For Of 循环中使用对象

    为什么不能在 for of 循环中使用对象 或者这是一个浏览器错误 这段代码在 Chrome 42 中不起作用 表示 undefined 不是一个函数 test first one for var item of test console
  • numpy的fft结果的幅度要乘以采样周期?

    我尝试用一 个例子来验证我对 Numpy 的 FFT 的理解 exp pi t 2 应该exp pi f 2 当没有对直接变换应用缩放时 但是 我发现要获得这个结果 我需要将 FFT 的结果乘以一个因子dt 这是我的函数上两个样本点之间的时
  • 使用 date_format 选择日期范围 MySQL

    我在使用 MySQL 选择日期范围时遇到问题 SELECT MvtDate date format MvtDate d m Y FROM immmvt WHERE date format MvtDate d m Y BETWEEN 01 0
  • 自定义to_yaml和domain_type

    我需要定义用于序列化 反序列化对象的自定义方法 我想做如下的事情 class Person def to yaml type example com 2010 11 30 Person end def to yaml string repr
  • 管理 IO 单子

    我正在学习一些 Haskell 请原谅新手错误 这个例程出错了 我对 do exister String gt Bool exister path do fileexist lt doesFileExist path direxist lt
  • 基于生成器的协程与原生协程

    我刚刚读过PEP0492谈论协程的新方法 但 PEP 未能让我理解基于生成器的协程和本机协程之间的区别 有人可以告诉我其中的区别 也许可以举例 吗 据我了解 他们使用不同的词 yield yield from 和 wait async yi
  • GBZ80:LD HL,(SP+e) 如何影响 H 和 C 标志?

    在 Gameboy Z80 上 究竟如何LD HL SP e 操作影响 H 和 C 标志吗 半进位 进位 参考 http www devrs com gb files opcodes html 我意识到这是一个老问题 但我不久前遇到了类似的
  • 依赖属性错误

    我正在学习依赖属性 我读了很多帖子和书籍 但仍然不清楚 下面的程序是我为了学习而写的 其中有些错误 请帮忙解决 我有疑问 自定义依赖属性元素的主要用途是用于更改通知 我找到了一个 IsDefaultProperty 代码Button在 WP
  • 设置asterisk agi功能处理的等待音

    我使用星号和正常的 PHP AGI 以下this链接问题是我的 PHP AGI 需要 5 秒才能执行 我只是想设置一些等待音 让用户等待 AGI 处 理完毕 在同一个链接上我发现了一些东西 设置音乐 启用 禁用保持音乐发生器 例如 默认设置
  • 无限滚动 Div 与 Ajax 加载内容?

    我想实现一种称为可滚动 div 的技术GWT 我正在尝试做的事情如下 如果用户在我的页面上 他只能看到视口 图像中的绿色框 该视口中的所有 DOM 元素在页面加载时对用户可见 在页面加载时加载页面后 所有不在视口上的 DOM 元素尚未加载
  • VS2010 - WinForms - DataGridView - 绑定到数据集

    我是 winforms 的新手 我在表控件中有一个 datagridview 我正在尝试绑定它来显示数据 DataSet dataSet new DataSet DataTable dataTable dataSet Tables Add
  • 如何使用 tkinter filedialog.askopenfilename 方法避免文件选择器中隐藏文件?

    我想允许用户从文件管理器中选择 CSV 文件 但它也显示了所有隐藏文件夹 这是非常不合适的 如何避免隐藏文件夹 def importCSV self self file filedialog askopenfilename initiald
  • SQL Server 中表变量可以拥有的最大记录数

    是否有任何约束来限制表变量中可以拥有的记录数量 如果是 表变量可以容纳的最大记录数是多少 我必须编写一个存储过程来处理大约 1000 条记录 我需要使用表变量或临时表吗 因此 MSDN 官方网站SQL Server 的最大容量规格表变量没有
  • 如何在 iOS 10 中安装自签名证书

    Apple 似乎在 iOS 10 中删除了信任自签名 SSL 证书的功能 我创建了自己的自签名证书 并拥有一个使用我的证书签名的本地 Web 服务器 我必须在 iOS 中安装我的证书才能在本地进行测试 因为我开发了一个需要信任我的证书的 i
  • 增强的 for 循环不适用于将值分配给数组(Java)[重复]

    这个问题在这里已经有答案了 我不明白为什么我不能使用增强的 for 循环为数组的元素赋值 例如 像这样使用 for 循环 int array new int 5 for int i 0 i lt 5 i array i 10 产生我想要的东
  • 用GD创建一张包含其他图像的图片

    我想用PHP用GD创建一张由不同的其他图片组成的图片 例如 我有 6 张 或更多 图片 我想创建一张包含这些不同图片的图片 困难在于我的最终图片必须具有固定的宽度和高度 304x179 因此如果不同的图片太大 则必须将其剪切 这是来自 Ic
  • 如何使用 Ruby 从 CSV 中删除行

    给定以下 CSV 文件 如何删除 foo 列中包含单词 true 的所有行 Date foo bar 2014 10 31 true derp 2014 10 31 false derp 我有一个可行的解决方案 但它需要创建一个辅助 CSV