【发布时间】:2010-08-15 02:02:48
【问题描述】:
我有一个大的 csv。我想删除文件的第一行。这是怎么做的?我不想将每一行复制到一个数组中并为前一个索引重写它们并删除第一个。一定有更好的办法。
谢谢
【问题讨论】:
我有一个大的 csv。我想删除文件的第一行。这是怎么做的?我不想将每一行复制到一个数组中并为前一个索引重写它们并删除第一个。一定有更好的办法。
谢谢
【问题讨论】:
虽然 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
如果这对您来说太慢了,请告诉我,我们将重写它以使用块读取而不是实际解析整个文件。
【讨论】:
嗯,你可以走一些捷径,但有几件事是你无法绕开的:
根据编码,字符可能不会映射到文件中的单个字节,因此您必须将其作为文本读取。
您必须至少解析文件的第一条记录。 CSV 格式不是基于行的,尽管它使用换行符来分隔记录。一个值也可以包含一个换行符,所以你不能只读到第一个换行符就认为这是第一条记录。
没有办法删除文件的一部分,所以无论你做什么,你仍然需要重写整个文件。
因此,您可以解析标题(如果有)和第一条记录,然后您可以将文件的其余部分作为纯文本读取。然后您可以将其余部分写回第一条记录开始的位置(或从文件开头写入并包含标题)。
【讨论】: