为什么读取CSV文件时会有一个尾随列?

时间:2013-04-15 14:38:20

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

我有一个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

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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

尾随;是罪魁祸首。

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

您可以使用以下内容对CSV返回的数据进行后处理:

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

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