大家好,我目前正在使用fasterCSV解析ruby中的CSV文件,并且想知道如何去除CSV上的初始数据行(初始行包含由另一个软件包生成的时间/日期信息)。
我尝试使用fasterCSV.table,然后删除第(0)行,然后将其转换为CSV文档,然后对其进行解析
但这行仍然存在于文档中。
还有其他想法吗?
fTable = FasterCSV.table("sto.csv", :headers => true)
fTable.delete(0)发布于 2010-05-27 15:16:18
根据文档,fTable = FasterCSV.table("sto.csv", :return_headers => false)应该做你想做的事情。.table暗示:headers => true The docs有这个信息。
发布于 2010-05-27 15:01:39
三点建议
你能让FasterCSV忽略这行吗?
您可以使用:return_headers => true选项跳过错误的行。如果第二行不是真正的标题,这将非常有效。有关更多信息,请参阅here
:return_headers:如果为false,标题行将被静默接受。如果设置为true,则在FasterCSV::Row对象中返回具有相同标题和字段的标题行(但字段不通过转换器)。
用另一个工具把这条线砍掉
你不需要使用Ruby来做这件事--你可以使用here方法从Ruby调用一行程序,使用建议的解决方案之一来切碎文件怎么样。
最大灵活性-使用FasterCSV逐行解析文件
您是否考虑过直接读取文件,跳过第一行,然后接受或拒绝行?我的代码的核心是这个parse方法,它将文件视为一系列行,接受或拒绝每一行。您可以执行类似的操作,但跳过第一行。
巧妙的是,您可以通过定义自己的可接受行来确定哪些行是可接受的?方法-只将有效的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发布于 2013-05-07 23:01:02
嗨,我正在为澳大利亚选举委员会提供一些数据。这个文件的第一行有一个日期字符串,第二行有一个标题
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。
https://stackoverflow.com/questions/2918711
复制相似问题