首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FasterCSV中第二行的标题?

FasterCSV中第二行的标题?
EN

Stack Overflow用户
提问于 2010-05-27 13:39:01
回答 3查看 3K关注 0票数 2

大家好,我目前正在使用fasterCSV解析ruby中的CSV文件,并且想知道如何去除CSV上的初始数据行(初始行包含由另一个软件包生成的时间/日期信息)。

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

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

还有其他想法吗?

代码语言:javascript
复制
fTable = FasterCSV.table("sto.csv", :headers => true)
fTable.delete(0)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-27 15:16:18

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

票数 1
EN

Stack Overflow用户

发布于 2010-05-27 15:01:39

三点建议

你能让FasterCSV忽略这行吗?

您可以使用:return_headers => true选项跳过错误的行。如果第二行不是真正的标题,这将非常有效。有关更多信息,请参阅here

:return_headers:如果为false,标题行将被静默接受。如果设置为true,则在FasterCSV::Row对象中返回具有相同标题和字段的标题行(但字段不通过转换器)。

用另一个工具把这条线砍掉

你不需要使用Ruby来做这件事--你可以使用here方法从Ruby调用一行程序,使用建议的解决方案之一来切碎文件怎么样。

最大灵活性-使用FasterCSV逐行解析文件

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

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

代码语言:javascript
复制
      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
票数 4
EN

Stack Overflow用户

发布于 2013-05-07 23:01:02

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2918711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档