Ruby读取txt文件写入CSV仅保留最后一行问题求助
问题根因
- 你把
CSV.open("plantas.csv", "w")写在了遍历每一行的循环内部,w写入模式每次打开文件都会清空原有内容,所以只有最后一次循环写入的内容被保留 - 直接用
split(',')拆分带引号的csv行容错率低,如果字段内部存在逗号会拆分错误,建议直接用Ruby内置的CSV类读取源txt文件,自动处理引号和字段拆分逻辑
修正后代码
require 'csv' Plantas = Struct.new(:identifier, :code, :lang, :fullname) # 目标csv文件全程只打开一次,避免重复覆盖 CSV.open("plantas.csv", "w") do |csv| # 直接用CSV类读取源txt(本身就是标准csv格式),自动处理引号、拆分字段 CSV.foreach("planta.txt", headers: true) do |row| new_plant = Plantas.new( row['identifier'], row['code'], row['lang'], row['fullname'] ) # 按需求用空格拼接为单字符串写入 csv << ["#{new_plant.identifier} #{new_plant.code} #{new_plant.lang} #{new_plant.fullname}"] # 如果需要导出为4列独立的csv,替换为下行即可 # csv << [new_plant.identifier, new_plant.code, new_plant.lang, new_plant.fullname] end end
输出效果
运行后plantas.csv内容如下:
N1952 LEECO la Leea coccinea non N51170 CAWUR en Toddy palm
内容的提问来源于stack exchange,提问作者Yung Sifilis
相关产品推荐
相关产品推荐

