gpt4 book ai didi

Ruby CSV - 第 1 行中的非法引用。CSV::MalformedCSVError

转载 作者:数据小太阳 更新时间:2023-10-29 07:52:39 25 4
gpt4 key购买 nike

我在读取 csv 文件时遇到问题。文件来自 Windows,所以我想存在一些编码问题。我的代码如下所示:

CSV.open(path, 'w', headers: :first_row, col_sep: ';', row_sep: "\r\n", encoding: 'utf-8') do |csv|    
CSV.parse(open(doc.file.url), headers: :first_row, col_sep: ';', quote_char: "\"", row_sep: "\r\n", encoding: 'utf-8').each_with_index do |line, index|

csv << line.headers if index == 0

# do something wiht row

csv << line
end
end

我必须打开现有文件并从中完成一些列。所以我只是创建新文件。现有文件存储在 Dropbox 上,因此我必须使用打开方法。

问题是我在这一行中遇到错误:

 CSV.parse(open(doc.file.url), headers: :first_row, col_sep: ';', quote_char: "\"", row_sep: "\r\n", encoding: 'utf-8').each_with_index do |line, index| 

错误是:

  Illegal quoting in line 1. CSV::MalformedCSVError

我检查了一下,好像文件中没有 BOM 字符(不确定是否检查正确)。问题似乎出在引号字符中。文件中的每一行都会抛出异常。

这是导致我出现问题的文件:https://dl.dropboxusercontent.com/u/3900955/geo_bez_adresu_10_do_testow_small.csv

我尝试了 StackOverflow 的不同方法,但没有任何帮助,例如我将代码更改为:

CSV.open(path, 'w', headers: :first_row, col_sep: ';', row_sep: "\r\n", encoding: 'utf-8') do |csv|
open(doc.file.url) do |f|
f.each_line do |line|
CSV.parse(line, 'r:bom|utf-8') do |row|
csv << row
end
end
end
end

但这并没有帮助。如果您能帮助我解析此文件,我将不胜感激。

=======编辑=========

当我在 Windows 上使用将 ANSI 编码为 UTF-8(在 Notepad++ 中)保护同一文件时,我可以正确解析该文件。从这个讨论What is "ANSI as UTF-8" and how can I make fputcsv() generate UTF-8 w/BOM? ,好像我在原始文件中有 BOM。如果我的文件包含 BOM,我如何在 Ruby 中 checkin 以及如何解析包含 BOM 的 csv 文件?

最佳答案

CSV.parse() 的第一个参数需要一个字符串,但您传递的是一个 File 对象。发生的事情是 parse() 改为解析 (file object).to_s 的扩展值,这会导致错误。

更新

要使用 BOM 读取文件,您可以这样做:

CSV.new(File.open('file.csv', 'r:bom|utf-8'), col_sep: ';').each do |row|
...
end

引用:https://stackoverflow.com/a/7780559/445221

关于Ruby CSV - 第 1 行中的非法引用。CSV::MalformedCSVError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25232719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com