【发布时间】:2014-12-09 19:25:37
【问题描述】:
我正在处理一个包含大量列和行的大型 CSV 文件(数以万计,因此几乎不可能逐个单元格地检查)。
文件中的某个地方可能出现了错误字符。如果出现错误(主要是标题中的错误),我尝试使用构造 begin - rescue 跳过当前处理的行,但它不起作用,脚本会在偶然发现字符时停止。
有没有办法忽略/跳过这个“坏”字符/符号?
为了处理 CSV 文件,我使用的是SmartCSV。
编辑:一些代码
datas = SmarterCSV.process(file, {:col_sep => ';', :chunk_size => 100, :remove_empty_values => false, :remove_empty_hashes => false }) do |data|
begin
data.each do |d|
user.something = d[:hobby]
...
here is basically just saving data from the file to database tables
...
end
rescue => e
logger.warn "Ooops, an error occurred while processing this record: #{e}"
end
end
我也尝试将begin 结构放入data.each,但也无法避免这种情况。
这个问题的解决方案是对文件的每个元素/单元格进行编码,但每一行都有大约 70 个单元格......所以我正在努力寻找更好的解决方案,如果有的话。
EDIT2:在处理 CSV 的文件顶部添加 # encoding: UTF-8。 CSV 文件具有 us-ascii 字符集。
【问题讨论】:
-
有什么方法可以在这里发布您的脚本?
-
在读取 CSV 文件之前修复并解决文件的编码问题,阅读这篇文章 -> stackoverflow.com/questions/4697413/…
-
@DevDude 说了什么,或者至少是救援尝试。
-
@steenslag 看来这个库真的是关闭了修改,但是看了一圈,我发现这个问题很常见,最好的办法是在尝试其他任何事情之前实际修复编码。跨度>
-
@DevDuda steenslag 谢谢你们的消息,我添加了一些代码来说明我如何处理 CSV 文件。
标签: ruby-on-rails ruby csv utf-8