Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
#!/usr/bin/env ruby
# Originally written by
# Added and minor changes by Gavin Laking
# Rewritten by Andrew Bennett for Ruby 1.9
# Usage: ruby csv_to_fixture.rb file.csv [--json]
# "id","name","mime_type","extensions","icon_url"
# "1","unknown","unknown/unknown","||","/images/icon/file_unknown.gif"
# "2","image/tiff","image/tiff","|tiff|tif|","/images/icon/blank.png"
# if you want to remove the id: "number" line from the resulting YAML file
# do a find and replace for: ^( id: \"\d*\"\n) in Textmate
require 'csv'
require 'json'
require 'yaml'
input = ARGV.shift
is_file = (input.nil? ? false : File.exist?(input))
file = is_file ? input : STDIN
doc = is_file ? : CSV.parse(
fields = doc.shift
records =
doc.each_with_index do |row, i|
record =
fields.each_with_index do |field, j|
record[field] = row[j]
records["record_#{i}"] = record
flag = ARGV.shift unless input.nil?
flag ||= input || '--yaml'
case flag
when '--json' then
puts records.to_json
puts records.to_yaml
Copy link

Phlow commented Mar 2, 2020

Hello, thank you for this great script. It works for me. But is there a way to channel the output directly into a file?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment