在日常工作中,经常需要处理从系统导出的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
这样处理完的数据可以直接导入财务系统,省去重复计算的麻烦。
这类小脚本不需要多复杂,往往十几行就能解决实际问题。与其每天花半小时点鼠标,不如花一次时间写段代码,以后一键搞定。