代码之家  ›  专栏  ›  技术社区  ›  Schroedinger

Fastercsv第二排的标题?

  •  2
  • Schroedinger  · 技术社区  · 16 年前

    今天,我正在使用fastercsv解析Ruby中的一个csv文件,并想知道如何去掉csv上的初始数据行(初始行包含由另一个软件包生成的时间/日期信息)。

    我尝试使用fastercsv.table,然后删除行(0),然后将其转换为csv文档,然后对其进行解析。

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

    还有其他想法吗?

    fTable = FasterCSV.table("sto.csv", :headers => true)
    fTable.delete(0)
    
    3 回复  |  直到 13 年前
        1
  •  1
  •   x1a4    16 年前

    据文件记载, fTable = FasterCSV.table("sto.csv", :return_headers => false) 应该做你想做的。 .table 暗示 :headers => true The docs 有这个信息。

        2
  •  4
  •   Chris McCauley    16 年前

    三点建议


    你能让Fastersv忽略这条线吗?

    您可以使用:return_headers=>true选项跳过错误的行。如果第二行不是真正的头球,那就太好了。见 here 为了更多

    :返回标题:

    如果为false,则标题行将静默 吞下。如果设置为true,则标题行 在fastercsv::行中返回 具有相同标题和的对象 字段(保存字段不移动 通过转换器)。


    用另一个工具把线切掉

    您不需要为此使用Ruby—使用建议的解决方案之一切碎文件如何? here 您可以使用System方法从Ruby调用一行程序。


    最大灵活性-使用fastercsv逐行分析文件

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

    简洁的一点是,通过定义自己的可接受行,可以确定哪些行是可接受的?方法-只将有效的csv数据传递给acceptable?其余的被丢弃以响应异常。

          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
    
        3
  •  2
  •   Michael Milewski    13 年前

    大家好,为澳大利亚选举委员会提供一些数据。相关文件的第一行有日期字符串,第二行有标题。

    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该次数。

    推荐文章