Почему замена на месте так сложно в файлах? - PullRequest
1 голос
/ 10 апреля 2019

У меня есть очень большой CSV-файл, который я хочу импортировать прямо в Postgresql с помощью COPY.Для этого заголовки столбцов CSV должны соответствовать именам столбцов БД.Поэтому мне нужно сделать простую замену строки в первой строке очень большого файла.

Есть много ответов о том, как это сделать, например:

Все ответы подразумевают созданиекопия большого файла или использование решений на уровне файловой системы, которые обращаются ко всему файлу, хотя релевантна только первая строка.Это делает все решения медленными и кажущимися излишними.

Что является основной причиной, которая делает эту простую работу такой сложной?Это связано с файловой системой?

1 Ответ

4 голосов
/ 10 апреля 2019

Основная причина в том, что файл .csv является текстовым файлом, и внесение изменений в первую строку файла подразумевает произвольный доступ к первой «записи» файла. Но текстовые файлы на самом деле не имеют «записей», они имеют строки неравной длины. Таким образом, изменение первой строки подразумевает чтение файла до первого возврата каретки, размещение чего-либо на его месте, а затем перемещение всех остальных данных в файле влево, если замена короче, или вправо, если замена это дольше. И для этого у вас есть два варианта. (1) Считайте весь файл в память, чтобы вы могли выполнить сдвиг влево или вправо. (2) Прочитайте файл построчно и запишите новый.

В конце легко добавить материал, потому что это не подразумевает смещение того, что уже есть.

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