ruby-on-rails - Ruby:数据没有引号,但 CSV.parse 引发 CSV::MalformedCSVError: Illegal quoting in line x
问题描述
我正在使用 ruby CSV.parse 从 Google 表格中为我的 Rails 项目读取实时数据。在我的seeds.rb 文件中,我正在读取这样的csv 数据
point_csv_path = "https://docs.google.com/spreadsheets/d/{key}/gviz/tq?tqx=out:csv&sheet=points"
CSV.parse(open(point_csv_path), :headers=>true).each do |row|
Point.create!(
point_id: row["point_id"].to_i,
point_type: row["point_type"],
identifier: row["identifier"].to_i,
longitude: row["longitude"],
latitude: row["latitude"],
location: row["location"],
ordering: row["ordering"].to_i)
end
对于google sheet中的数据,我是从网上手动复制粘贴的,数据根本不包含任何引号。谷歌表中的前 3 行数据如下:
point_id point_type identifier longitude latitude location ordering
1 sensor 1 -71.050054 42.360152 null 0
2 sensor 2 -71.049428 42.359373 null 0
3 sensor 3 -71.049337 42.358969 null 0
运行后$ rails db:seed
,我收到以下错误消息
rails aborted!
CSV::MalformedCSVError: Illegal quoting in line 3.
/media/anyan/file/rails_project/db/seeds.rb:33:in `<main>'
/media/anyan/file/rails_project/bin/rails:9:in `<top (required)>'
/media/anyan/file/rails_project/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:seed
(See full trace by running task with --trace)
我知道在 stackoverflow 上有很多类似的问题,但我没有一个尝试解决我的问题。例如,添加:quote_char => "|"
或:encoding => 'bom|utf-8'
作为 CSV.parse() 的参数。我认为这与读取 csv 数据流有关,所以我将数据下载到磁盘并且我有同样的错误。我怎么解决这个问题?谢谢!
更新:将csv文件下载到本地磁盘并用VSCode打开后,前3行数据为:
"point_id","point_type","identifier","longitude","latitude","location","ordering"
"1","sensor","1","-71.050054","42.360152","null","0"
"2","sensor","2","-71.049428","42.359373","null","0"
"3","sensor","3","-71.049337","42.358969","null","0"
解决方案
推荐阅读
- python - MultipleObjectsReturned at /cart/ in Django
- c - 编写 10 秒后关闭的 C 程序
- android - 无法从外部应用程序中找到内容提供者
- php - 无法运行 phpxdebug
- xslt - 如何在xslt中的元素之间找到一个空格
- sql-server - 如何使用连接显示不匹配的结果(sqlserver)
- html - 如何使用 freemarker 设置多选?提交“猫”列表以供选择
- html - 单击事件仅适用于表格 Angular 8 的第一页
- java - 如何检查 Firebase 消息服务是否处于启动完成状态?
- vim - 如何在插入模式下使 coc.nvim 检查代码的语义?