【问题标题】:Why do I have a trailing column when reading a CSV file?为什么读取 CSV 文件时会有尾随列?
【发布时间】:2013-04-07 17:35:16
【问题描述】:

我有一个 CSV 文件,其结构如下:

"customer_id";"customer_name";"quantity";
"id1234";"Henry";"15";

使用 Ruby 的标准 CSV 库进行解析:

csv_data = CSV.read(pathtofile,{
    :headers => :first_row,
    :col_sep => ";",
    :quote_char => '"'
    :row_sep => "\r\n" #setting it to "\r" or "\n" results in MalformedCSVError
})

puts csv_data.headers.count #4

我不明白为什么解析似乎会导致四列,尽管文件只包含三列。这不是解析文件的正确方法吗?

【问题讨论】:

    标签: ruby parsing csv multiple-columns ruby-parser


    【解决方案1】:

    每行末尾的; 暗示另一个字段,即使没有值。

    我要么删除尾随的;,要么在解析第四个字段时忽略它。

    【讨论】:

    • 我将删除尾随;有干净的数据可以使用。感谢您的回答。
    【解决方案2】:

    尾随的; 是罪魁祸首。

    您可以预处理文件,去除尾随的;,但这会产生不必要的开销。

    您可以使用以下方式对从 CSV 返回的数据数组进行后处理:

    csv_data = CSV.read(...).map(&:pop)
    

    这将遍历子数组,删除每个子数组中的最后一个元素。问题是read 不可扩展,因此您可能需要重新考虑使用它,而是使用CSV.foreach 逐行读取文件,然后在返回给您时弹出最后一个值。

    【讨论】:

      猜你喜欢
      • 2015-11-25
      • 2016-06-27
      • 2021-08-25
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多