我正在尝试解析上传的CSV文件。这是完整的错误消息:
[Worker(host:PC.local pid:69594)] Job ImportJob (id=4) FAILED (3 prior attempts) with CSV::MalformedCSVError: Unquoted fields do not allow \r or \n (line 1).
CSV文件如下所示:
A1;A2;A3;A4;A5
B1;B2;B3;B4;B5
C1;C2;C3;C4;C5
这就是我循环CSV文件中数据的方式:
data = SmarterCSV.process(
file,
{
:col_sep => ';',
:chunk_size => 100,
:remove_empty_values => false,
:remove_empty_hashes => false
}
) do |d|
这里有什么问题?我试图把标题放到文件中,甚至试图删除它(上面发布的版本),但在这两种情况下我都得到了相同的错误。我该如何摆脱它?
答案 0 :(得分:3)
假设CSV文件是在Windows上创建的,那么行结尾是" \ r \ n"就不足为奇了。尝试明确地将其设为行分隔符:
:row_sep => "\r"
全部放在一起:
data = SmarterCSV.process(file,
:col_sep => ';',
:row_sep => "\r",
:chunk_size => 100,
:remove_empty_values => false,
:remove_empty_hashes => false) do |d|
答案 1 :(得分:1)
我遇到了这个确切的问题,但内置了CSV模块。
我通过将IO读取模式用作文本来解决它:' rt',而不是' r':
require 'csv'
CSV.open(file_name, 'rt').each do |row|
# blah, blah
end