日常知识通
柔彩主题三 · 更轻盈的阅读体验

用Ruby脚本轻松处理CSV文件的实用技巧

发布时间:2026-01-06 22:31:12 阅读:47 次

在日常工作中,经常需要处理从系统导出的CSV格式报表,比如销售数据、用户信息或库存清单。这些ref="/tag/182/" style="color:#E3A3CF;font-weight:bold;">文件用Excel打开虽然方便,但一旦涉及批量处理、数据清洗或自动化任务,手动操作就显得低效又容易出错。这时候,写个简单的Ruby脚本就能省下大量时间。

读取CSV文件的基本操作

Ruby自带了csv库,无需安装额外依赖,直接require就可以使用。比如要把一个名为sales.csv的销售记录文件读出来,可以这样写:

require 'csv'

CSV.foreach('sales.csv', headers: true) do |row|
  puts row['product_name'] + ': ' + row['amount']
end

这段代码会逐行读取文件,并打印出商品名称和金额。headers: true 表示第一行是表头,可以直接用列名访问数据,比按索引取值直观多了。

筛选符合条件的数据

假设你只想找出金额大于1000的订单,保存到新文件里,也很简单:

require 'csv'

results = CSV.open('high_value_orders.csv', 'w', write_headers: true, headers: ['order_id', 'amount', 'date'])

CSV.foreach('orders.csv', headers: true) do |row|
  if row['amount'].to_f > 1000
    results << row.fields
  end
end

results.close

运行后就会生成一个只包含高价值订单的新文件,适合发给主管做重点分析。

合并多个CSV文件

有时候数据分散在不同月份的文件中,比如january.csv、february.csv。想把它们合并成一个全年汇总文件,可以用下面的脚本:

require 'csv'

output = CSV.open('annual_report.csv', 'w')
Dir.glob('*.csv').each do |filename|
  CSV.foreach(filename) do |row|
    output << row.fields
  end
end
output.close

只要把脚本放在存放这些文件的目录下运行,所有内容就会自动合并。注意如果每个文件都有表头,记得去重处理,避免中间出现多余的标题行。

添加计算字段

财务同事常需要在原始数据上加一列“税后金额”。假设税率是13%,可以在读取时动态计算并写入新列:

require 'csv'

input = CSV.table('income.csv')
input.by_row.each do |row|
  row[:after_tax] = (row[:amount].to_f * 0.87).round(2)
end

input.headers << :after_tax
CSV.open('income_with_tax.csv', 'w') do |csv|
  csv << input.headers
  input.each do |row|
    csv << row.fields
  end
end

这样处理完的数据可以直接导入财务系统,省去重复计算的麻烦。

这类小脚本不需要多复杂,往往十几行就能解决实际问题。与其每天花半小时点鼠标,不如花一次时间写段代码,以后一键搞定。