Tag: csv

使用Ruby从CSV中减去时间

嗨,我想使用Ruby从CSV数组中减去时间 时间[0]是12:12:00 AM 时间[1]是12:12:01 AM 这是我的代码 time_converted = DateTime.parse(time) difference = time_converted[1].to_i – time_converted[0].to_i p difference 但是,我得到了0 p time[0].to_i给了我12 有没有办法来解决这个问题?

使用Ruby的Twilio SMS

我一直在研究一个能读取CSV excel文件并过滤通过短信发送的信息的程序。 目前,该程序只能通过短信发送一行过滤信息。 应该修改什么能够一行一行地发送? 目前代码在第1列和第2列搜索“medium”和“2”。它将发送第0列和第4列。因此结果将是“DT3 / SIG”,“修复Windows”但它不会发送第5行 – “ 90430 / RSO“,”修理灯“ require ‘rubygems’ require ‘twilio-ruby’ require “csv” def load_alarms CSV.read ‘alarms.csv’, {col_sep: ‘;’} end def filter_by_event_type_and_severity(alarms, event_type, severity) alarms.select do |alarm| alarm[1] == event_type && alarm[2].to_i == severity.to_i end end target_alarms = filter_by_event_type_and_severity( load_alarms, ‘medium’, 2) equipments = target_alarms.map { |alarm| [alarm[0], alarm[3]] } […]

Ruby CSV – 第1行中的非法引用.CSV :: MalformedCSVError

我从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上,因此我必须使用open方法。 问题是我在这一行中收到错误: CSV.parse(open(doc.file.url), headers: :first_row, col_sep: ‘;’, […]

如何快速从远程URL上的长CSV的前几行中获取字符串?

我正在完成一项任务,我使用雅虎的股票价格系统从网上检索几个股票价格。 不幸的是,我需要使用的Yahoo API会返回一个.csv文件,该文件显然包含每天交易股票的行数,对于我正在使用的股票至少有5000行,超过10行其中一些线路( 例如 )。 我只关心当前的价格,这是在第二行。 我目前正在这样做: require ‘open-uri’ def get_ticker_price(stock) open(“http://ichart.finance.yahoo.com/table.csv?s=#{stock}”) do |io| io.read.split(‘,’)[10].to_f end end ……但它确实很慢。 所有延迟都来自获取文件,还是有一些来自我处理它的方式? io.read读取整个文件吗? 有没有办法从Yahoo CSV文件中只下载前几行? 如果问题1和2的答案不能使这个问题无关紧要,那么有没有更好的方法来处理它而不需要查看整个文件(假设io.read正在做什么)?

在rails应用程序中读取大型csv文件会占用大量内存 – 减少内存消耗的策略?

我有一个rails应用程序,允许用户上传csv文件,并在delayed_job gem的帮助下安排读取多个csv文件。 问题是应用程序将其文件中的每个文件读入内存,然后写入数据库。 如果只读取其中的1个文件,但是当读取多个文件时,服务器上的RAM会变满并导致应用程序挂起。 我试图找到解决这个问题的方法。 我研究的一个解决方案是将csv文件分成更小的部分并将它们保存在服务器上,然后读取较小的文件。 看到这个链接 example: split -b 40k myfile segment 不是我的首选解决方案 有没有其他方法来解决这个问题,我没有必要打破文件。 解决方案必须是ruby代码。 谢谢,

如何在exception后继续在Ruby中处理块?

我正在尝试处理一些非常大的制表符分隔文件。 过程是: begin Dir[“#{@data_path}*.tsv”].each do |file| begin CSV.foreach(file, :col_sep => “\t”) do |row| # assign columns to model and save end @log.info(“Loaded all files into MySQL database illu.datafeeds”) rescue Exception => e @log.warn(“Unable to process the data feed: #{file} because #{e.message}”) next end end 但是,当我执行此操作时,我收到以下错误: Unable to process the file: /Users/XXXXX_2013-06-12.tsv because Illegal quoting in […]

导入CSV的Rails由于格式错误而失败

当我尝试使用以下代码导入文件时,我收到CSV:MalFormedCSVError : def import_csv(filename, model) CSV.foreach(filename, :headers => true) do |row| item = {} row.to_hash.each_pair do |k,v| item.merge!({k.downcase => v}) end model.create!(item) end end csv文件是巨大的,所以有没有办法我可以使用csv文件的其余部分记录格式错误的行和CONTINUE EXECUTION ?

Ruby:如何使用dump方法将数据输出到csv文件?

我尝试使用ruby标准csv lib将对象的arr转储到名为’a.csv’的csv.file中 http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html#method-c-dump dump(ary_of_objs, io = “”, options = Hash.new) 但在这种方法中,我如何转储到文件中? 没有这样的例子存在和帮助。 我谷歌没有为我做的例子…… 此外,文档说… 您可以提供的下一个方法是名为csv_headers()的实例方法。 期望此方法返回文档的第二行(再次作为数组),用于为每列提供标题。 默认情况下,:: load将设置一个实例变量,如果字段标题以@字符开头或调用send()将标头作为方法名称并将字段值作为参数传递。 仅在Array的第一个对象上调用此方法。 任何人都知道如何将实例方法csv_headers()传递给此转储函数?

处理大量的CSV文件

我会尝试扩展我的问题的标题。 我从事ruby项目。 我必须处理存储在CSV文件中的大量数据(大约120000)。 我必须阅读这些数据,处理并放入DB。 现在需要几天时间。 我必须加快速度。 问题是,有时在处理过程中我会遇到一些exception,我必须重复整个导入过程。 我认为更重要的是提高性能,而不是使用少量数据查找错误。 现在我坚持使用CSV文件。 我决定对处理脚本进行基准测试以找到瓶颈,并改进从CSV加载数据。 我看到以下步骤: 基准并修复最有问题的瓶颈 也许从CSV和处理拆分加载。 例如,在那里创建单独的表并加载数据。 在下一步中加载此数据,处理并放入右表。 引入线程以从CSV加载数据 现在我使用标准的ruby CSV库。 你推荐一些更好的gem吗? 如果你们中的一些人对类似的问题很熟悉,那么很高兴了解你的意见。 编辑: 数据库:postgrees 系统:linux

Ruby:如果满足条件,则写入CSV

我是Ruby的新手,并使用它来尝试读/写csv。 到目前为止,我有一个脚本执行以下操作: 从CSV文件导入数据,将选择列存储为单独的数组(我不需要每列的数据) 对数据执行计算,将结果存储在新创建的数组中 将数组转换为表行,以输出到csv table = [Result1, Result2, Result3].transpose 目前,我可以使用以下内容输出表: CSV.open(resultsFile, “wb”, :write_headers=> true, :headers => [“Result1”, “Result2”, “Result3”] ) do |csv| table.each do |row| csv << row end 我的问题是,如何添加条件只输出其中一个结果等于某个文本字符串的行。 例如,如果result2中的值等于“Apple”,我希望将该行中的数据写入csv文件。 如果没有,则跳过该行。 我尝试将if / else放在几个不同的区域并且没有取得任何成功。 谢谢你的帮助