我有一个大的csv。我想删除文件的第一行。这是怎么做到的?我不想将每一行复制到一个数组中,并为前一个索引重写它们并删除第一个。必须有更好的方法。
谢谢
答案 0 :(得分:3)
尽管Guffa可以在标题中使用换行符,但这并不常见,所以如果您可以忽略该边缘情况,则可以使用:
File.open('new.csv', 'w+') do |outf|
File.open('original.csv') do |inf|
inf.each_line.with_index do |line, i|
outf.write line unless i==0
end
end
end
如果这对你来说太慢了,请告诉我,我们会重写这个以使用块读取而不是实际解析整个文件。
答案 1 :(得分:2)
嗯,你可以采取一些捷径,但有些事情是你无法规避的:
根据编码,字符可能不会映射到文件中的单个字节,因此您必须将其作为文本读取。
您必须至少解析文件的第一条记录。 CSV格式不是基于行的,尽管它使用换行符来分隔记录。值也可以包含换行符,因此您不能只读取第一个换行符并理所当然地认为这是第一个换行符。
无法删除文件的一部分,所以无论你做什么,你仍然需要重写整个文件。
因此,您可以解析标题(如果有)和第一个记录,然后您可以将文件的其余部分读作纯文本。然后你可以将其余部分写回第一条记录开始的位置(或从文件的开头写入并包含标题)。