У меня есть файл CSV, который я хочу изменить заголовки только для определенных столбцов (около 20 из них в моем реальном файле). Вот пример файла CSV:
Файл CSV
"name","blah_01_blah","foo_1_01_foo","bacon_01_bacon","bacon_02_bacon"
"John","yucky","summer","yum","food"
"Mary","","","cool","sundae"
Я пытался сделать это с классом File / IO, но когда он читает файл для выполнения gsub
, он удаляет все кавычки вокруг каждой строки, разделенные запятыми. Вот код, который я использую:
код рубина
file = 'file.csv'
replacements = {
'blah_01_blah' => 'newblah1',
'foo_01_foo' => 'coolfoo1',
'bacon_01_bacon' => 'goodpig1',
'bacon_01_bacon' => 'goodpig2'
}
matcher = /#{replacements.keys.join('|')}/
outdata = File.read(file).gsub(matcher, replacements)
File.open(file, 'w') do |out|
out << outdata
end
В результате я получаю в файле CSV:
Новый файл CSV
name,blah_01_blah,foo_1_01_foo,bacon_01_bacon,bacon_02_bacon
John,yucky,summer,yum,food
Mary,"","",cool,sundae
Он хранит кавычки в пустых полях, но выводит их вокруг строк в других местах. Я хочу сохранить эти кавычки на случай, если по какой-то причине мошенническая запятая окажется где-то в строке, поэтому она не будет сброшена. Как я могу изменить заголовки, не теряя кавычки вокруг строк?
РЕДАКТИРОВАТЬ - это то, что я хочу, чтобы файл выглядел в конце.
Ожидаемый результат CSV-файл
"name","newblah1","coolfoo1","goodpig1","goodpig2"
"John","yucky","summer","yum","food"
"Mary","","","cool","sundae"
Спасибо!