You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:06:04