处理 CSV
csv 库
处理 CSV 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。
什么是 CSV
CSV(逗号分隔值)以纯文本形式存储表格数据,每行对应一条记录,字段之间用逗号分隔。Ruby 的标准 csv 库可以读取和写入它。
require 'csv'
row = CSV.parse_line('Alice,30,Engineer')
p row解析 CSV 字符串
CSV.parse 会将多行 CSV 字符串转换为行数组组成的数组。
require 'csv'
data = "name,age\nAlice,30\nBob,25"
rows = CSV.parse(data)
p rows使用表头
传入 headers: true,即可将第一行作为字段名称,并使每一行的行为类似哈希。
require 'csv'
data = "name,age\nAlice,30"
CSV.parse(data, headers: true).each do |row|
puts(row['name'])
puts(row['age'])
end遍历行
您可以像遍历任何数组一样循环处理解析后的行,并通过索引访问字段。
require 'csv'
rows = CSV.parse("1,a\n2,b\n3,c")
rows.each { |r| puts "#{r[0]} -> #{r[1]}" }转换类型
使用 converters: :numeric,可以自动将数字字段转换为整数或浮点数。
require 'csv'
rows = CSV.parse("10,20\n30,40", converters: :numeric)
puts(rows[0][0] + rows[1][1])生成 CSV
CSV.generate 会构建 CSV 字符串。将数组推入代码块即可添加行。
require 'csv'
out = CSV.generate do |csv|
csv << ['name', 'age']
csv << ['Alice', 30]
end
puts out引号与特殊字符
如果字段包含逗号、引号或换行符,CSV 会自动为其添加引号,从而保持结构完整。
require 'csv'
out = CSV.generate do |csv|
csv << ['note', 'Hello, world']
end
puts out自定义分隔符
对于使用制表符或分号分隔的文件,请设置 col_sep。这可以处理 TSV 和欧洲格式的 CSV 变体。
require 'csv'
rows = CSV.parse("a;b;c", col_sep: ';')
p rows写入文件
使用模式 'w' 调用 CSV.open,可以直接将行写入文件。
require 'csv'
require 'tmpdir'
path = File.join(Dir.tmpdir, 'people.csv')
CSV.open(path, 'w') do |csv|
csv << ['name', 'age']
csv << ['Carol', 28]
end
puts(File.read(path))从文件读取
CSV.read 会将整个文件加载到行数组中,并接受与 parse 相同的选项。
require 'csv'
require 'tmpdir'
path = File.join(Dir.tmpdir, 'nums.csv')
File.write(path, "x,y\n1,2\n3,4")
rows = CSV.read(path, headers: true)
puts(rows.first['y'])对列求和
一个常见任务是读取某一列并汇总其内容。可以结合使用表头、数字转换和 map。
require 'csv'
data = "item,price\npen,3\nbook,12"
total = CSV.parse(data, headers: true, converters: :numeric).sum { |r| r['price'] }
puts(total)快速检查
哪个选项可以让您通过列名称访问 CSV 字段,例如 row['age']?
回顾:使用 CSV
您可以处理表格数据:
- 使用
CSV.parse/CSV.read读取 - 使用
headers: true获取命名字段 - 使用
converters: :numeric获取带类型的值 - 使用
CSV.generate/CSV.open写入 - 使用
col_sep处理 TSV 和其他分隔符
require 'csv'
p CSV.parse_line('a,b,c')常见问题解答
「处理 CSV」课时是免费的吗?
是的 — 「处理 CSV」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。
「处理 CSV」这节课中我会学到什么?
csv 库 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ruby Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「处理 CSV」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ruby Academy 课中编写并运行代码吗?
能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 读取与写入 JSON
- 处理 CSV
- YAML 配置
- 选择格式