Как удалить первую строку из csv?(Рубин) - PullRequest
2 голосов
/ 15 августа 2010

У меня есть большой CSV. Я хочу удалить первую строку файла. Как это сделать? Я не хочу копировать каждую строку в массив и переписывать их для предыдущего индекса и удалять первый. Должен быть лучший способ.

спасибо

Ответы [ 2 ]

3 голосов
/ 15 августа 2010

Хотя 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

Если это слишком медленнодля вас, дайте мне знать, и мы перепишем это, чтобы использовать чтение блоков вместо того, чтобы фактически анализировать весь файл.

2 голосов
/ 15 августа 2010

Ну, есть несколько ярлыков, которые вы можете использовать, но есть несколько вещей, которые вы не можете обойти:

  • В зависимости от кодировки, символ может не отображаться на один байт в файле, поэтому вы должны прочитать его как текст.

  • Вы должны проанализировать хотя бы первую запись файла. Формат CSV не основан на строках событий, хотя он использует разрывы строк для разделения записей. Значение может также содержать разрыв строки, поэтому вы не можете просто прочитать первый разрыв строки и считать само собой разумеющимся, что это первая запись.

  • Невозможно удалить часть файла, поэтому, что бы вы ни делали, вам все равно придется переписать весь файл.

Таким образом, вы можете проанализировать заголовок (если он есть) и первую запись, а затем прочесть остальную часть файла в виде простого текста. Затем вы можете записать оставшуюся часть обратно в позицию, с которой началась первая запись (или записать с начала файла и включить заголовок).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...