我有两个基本相同的CSV文件,但是由于某种原因,SmarterCSV无法读取名为bad_file
Here is a Gist of both files的文件。Ruby的原生CSV库可以读取bad_file
没有问题。
在处理每个文件之前,我使用以下代码剥离标题行上方的所有内容:
def self.clean(file)
if (csv = File.read(file).gsub!(/\A.+?(?=^Date,)/m, ''))
tempfile = Tempfile.new('file_name')
tempfile.write(csv)
tempfile
else
file
end
end
字符串
然后我将该文件传递到更智能的CSV中,如下所示:
File.open(file, encoding: 'bom|utf-8') do |f|
chunk = SmarterCSV.process(f, {
verbose: true,
remove_empty_hashes: true,
col_sep: :auto,
force_utf8: true,
force_simple_split: true,
strip_chars_from_headers: /[\-"\xEF\xBB\xBF]/,
duplicate_header_suffix: ''
})
end
型
我不知道CSV文件有什么不同,更不用说为什么SmarterCSV不能处理坏的文件了。此外,如果有人有更好的方法从电子表格的顶部剥离不需要的信息,这可以解决这个问题。
1条答案
按热度按时间xoefb8l81#
CSV文件中的BOM标记存在问题,请参见:issue 219。
自SmarterCSV版本1.8.0以来,此问题已得到修复