FasterCSV中第二行的标题?

时间:2010-05-27 05:39:01

标签: ruby-on-rails ruby csv fastercsv

G'day伙计们,我目前正在使用fastCSV解析ruby中的CSV文件,并想知道如何摆脱CSV上的初始数据行(初始行包含另一个生成的时间/日期信息)软件包)

我尝试使用fasterCSV.table然后删除row(0)然后将其转换为CSV文档然后解析它

但该行仍然存在于文档中。

还有其他想法吗?

fTable = FasterCSV.table("sto.csv", :headers => true)
fTable.delete(0)

3 个答案:

答案 0 :(得分:4)

三个建议


你能让FasterCSV忽略这条线吗?

您可以使用:return_headers =>跳过坏线的真实选项。如果第二行不是真正的标题,这将很有用。有关详情,请参阅here

  

:return_headers:

     

如果为false,则标题行是静默的   吞噬。如果设置为true,则标题行   在FasterCSV :: Row中返回   对象具有相同的标题和   字段(除了字段不去   通过转换器。)


使用其他工具

关闭该行

你不需要使用Ruby - 如何使用建议的here解决方案切割文件,你可以使用系统方法从Ruby调用单行程序。


最大灵活性 - 使用FasterCSV

逐行解析文件

您是否考虑直接读取文件,跳过第一行然后接受或拒绝行?我的代码的核心是这个解析方法,它将文件视为一系列行,接受或拒绝每个行。你可以做类似的事情,但跳过第一行。

巧妙的是,您可以通过定义自己的行来确定哪些行可以接受?方法 - 只有有效的CSV数据传递给可接受的?其余的都被扔掉以回应异常。

      def parse(file)
            #
            # Parse data
            #
            row = []

            file.each_line do |line|

                the_line = line.chomp

                begin

                    row = FasterCSV.parse_line(the_line)

                    ok, message = acceptable?(row)


                    if not ok
                        reject(file.lineno, the_line, message)
                    else
                        accept(row, the_line)
                    end

                rescue FasterCSV::MalformedCSVError => e
                    reject(file.lineno, the_line, e.to_s)
                end

            end

答案 1 :(得分:2)

您正在为澳大利亚选举委员会提供一些数据。有问题的文件在第一行有一个日期字符串,第二行有标题

require 'csv'
require 'open-uri'

filename = "http://results.aec.gov.au/15508/Website/Downloads/SenateGroupVotingTicketsDownload-15508.csv"
file = File.open(open(filename))
first_line = file.readline
CSV.parse(file, headers: true).each do |row|
  puts row["State"]
end

我认为我引用的文件仍然存在,但可以用相关文件替换。如果你需要跳过更多行,你必须多次调用file.readline。

答案 2 :(得分:1)

根据文档,fTable = FasterCSV.table("sto.csv", :return_headers => false)应该做你想要的。 .table暗示:headers => true The docs有此信息。