从类似 CSV 的文件创建哈希

2024-01-30

我有一个产品文件,列出了商品编号、产品和价格。我想读取此文件并将其初始化为散列,其中项目 # 为键,产品和价格为值。这是我的文件

199, Shoes, 59.99
211, Shirts, 19.99
245, Hats, 25.99
689, Coats, 99.99
712, Beanies, 6.99

我希望它看起来像这样。

products = {
  199 =>['Shoes', 59.99],
  211 =>['Shirts', 19.99],
  245 =>['Hats', 25.99],
  689 => ['Coats', 99.99],
  712 => ['Beanies', 6.99]
}

这是我能想到的,但这并不是它真正想要的。

products_file = File.open("files.txt")
products_hash = []
while ! products_file.eof?
  product_hash = products_file.gets.chomp
  print product_hash.split(', ')
end

这是我想出的输出:

["199", "Shoes", "59.99"]
["211", "Shirts", "19.99"]
["245", "Hats", "25.99"]
["689", "Coats", "99.99"]
["712", "Beanies", "6.99"]

我将您的数据保存为名为的 CSV 文件products.csv并这样做了:

require 'csv'
products = {}
CSV.foreach("products.csv") do |line| 
  products[line[0].to_i] = [line[1].strip, line[2].to_f]
end
products
#=> {199=>["Shoes", 59.99], 211=>["Shirts", 19.99], 245=>["Hats", 25.99], 689=>["Coats", 99.99], 712=>["Beanies", 6.99]}

使用更简洁的方式可以实现相同的结果each_with_object,但它会立即将整个文件读入内存,如果文件很大,这可能不是一个好主意:

require 'csv'
products = CSV.read("products.csv").each_with_object({}) do |line, h|
  h[line[0].to_i] = [line[1].strip, line[2].to_f]
end 

还有一种更实用的方法,正如 Phrogz 最初建议的那样:

require 'csv'
products = Hash[ CSV.read('products.csv').map do |row|
  [ row[0].to_i, [row[1].strip,row[2].to_f] ]
end ]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从类似 CSV 的文件创建哈希 的相关文章

随机推荐

  • FTP获取所有文件

    我已使用 PHP 成功连接到 FTP 并且可以使用以下命令查看所有文件 ftp nlist 但是 有没有一种简单的方法可以下载当前目录中的所有这些文件 我找不到任何关于如何执行此操作的示例 Thanks 另一个简单的解决方案是 列出数组中的
  • 有没有办法在 d3 中向饼图添加突出显示?

    我希望我使用了正确的术语 但基本上我试图在 D3 中的饼图顶部创建突出显示 我见过很多添加阴影的东西 但一直无法使其成为高光 因此 我尝试在图表顶部添加弧线并为其添加高斯模糊 但它有两个问题 它不会与图表的其余部分一起过渡 并且突出显示会延
  • OpenStreetMap:从地址获取坐标

    OpenStreetMap 中是否有任何函数可以为您提供地址坐标 就像是 http router project osrm org locate request GetGeocoding nbaddresses 1 outputFormat
  • 在 R 或 ggplot2 中向多图输出添加徽标

    我试图将徽标添加到从 grid arrange 或rangeGrob 派生的输出中 我有以下代码 库 ggplot2 p1 lt ggplot ChickWeight aes x Time y weight colour Diet grou
  • 如何在QT中设计自定义形状的按钮

    I am trying to desing in Qt a sequence of custom buttons with arrow shape but I could not find the way I need something
  • OSX GCC如何指定sfml库源?

    我正在尝试编译一个使用的项目sfml我安装了sfml 2 1通过homebrew像下面这样 unknown542696d2a12b keeperrl kevzettler brew list sfml usr local Cellar sf
  • Rails ActiveRecord:三个表 has_many 通过:关联

    我正在尝试构建一个表来处理某个营销活动已设置为的位置和类别 并具有以下模型关联 class Campaign lt ActiveRecord Base has many campaign category metro bids depend
  • Git 用于 Windows 分页

    每当我执行git log命令无法终止 如果我执行 Ctrl C 它会退出分页环境 但如果我开始输入任何内容 它就会启动git log再次命令 正如已经提到的 git log X会将您的输出限制为最后 X 次提交 Git log 和其他 gi
  • SQL Server 2014中一个外键引用多个主键

    我的数据库中有三个表 医疗测试 MedicalTestID PK 运动测试 运动测试IDPK 一般需求 通用需求ID PK Inside GeneralNeeds有ProcessID需要保留哪些MedicalTestID and Sport
  • 我需要在 Windows 上的 Perl 脚本中包含 #!/usr/bin/perl 行吗?

    我刚刚在Windows上安装了ActivePerl并开始学习Perl 在我正在读的书中 第一个代码示例是这样的 usr bin perl use 5 010 say Hello world 由于我使用的是 Windows 我想知道是否需要包
  • 404 标头响应,但页面显示正常?

    我不是相关 PHP 网站的开发人员 而且我根本不会 PHP 但我被要求调查这个问题 基本上 当使用 Live HTTP Headers Firefox Addon 和我们的一些报告工具等工具时 我们网站之一上的大量页面似乎会返回 404 标
  • div 中的输入复选框在 Firefox 上跳转到页面顶部 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 I use div over label and input type checkbox 我这样做是为了让复选框看起来像一个按钮 这是我的
  • IE7 中 DHTML 更改后如何强制重排?

    我有一个页面 用户可以在其中动态添加文件上传框 添加框会更改它们所在的 div 的高度 但其下方的 div 的某些元素保持在同一位置 因此它们开始与新的 DOM 元素重叠 这在 IE8 Firefox Chrome 中可以正常工作 如何强制
  • migratordotnet - 从应用程序内部运行迁移(无需构建或构建)

    有没有办法从应用程序本身运行迁移 Thanks 我实例化 Migrator 类的实例 然后您可以调用成员方法 例如MigrateToLastVersion or MigrateTo long versionnr Migrator Migra
  • 从 Cygwin 启动 python IDLE 时 Tkinter 中出现 tcl_error

    我尝试启动IDLE来自 cygwin 我收到以下错误 Traceback most recent call last File usr bin idle line 5 in
  • 使用 msiexec 卸载特定功能

    我安装了一个具有两个功能 FirstFeature 和 SecondFeature 的测试应用程序 我只想从应用程序中删除一项功能 SecondFeature 我尝试在命令行中使用 REMOVE 属性 这是用于删除 SecondFeatur
  • 尝试使用JAVA读取Scroll Lock状态

    我有以下代码行 我正在尝试读取滚动锁的状态 当我的程序启动时 我得到滚动锁定的状态 不过我愿意实时获取状态 请指导以下内容 package assignment import java awt Toolkit import java awt
  • .NET 3 中的 System.Random 有多随机?

    我目前正在编写一个简单的密码生成器 C 为此我需要一些随机数 是否可以简单地使用Random http msdn microsoft com en us library system random aspx NET 附带的类或者是否存在任何
  • eclipse 错误地将包解释为“资源”或源文件夹

    我将现有的源代码树作为 Eclipse Java 项目导入 当我这样做时 我会在类 例如 mycompany logging LogEntry 中收到如下错误 The package mycompany logging does not m
  • 从类似 CSV 的文件创建哈希

    我有一个产品文件 列出了商品编号 产品和价格 我想读取此文件并将其初始化为散列 其中项目 为键 产品和价格为值 这是我的文件 199 Shoes 59 99 211 Shirts 19 99 245 Hats 25 99 689 Coats