Как правило, вы не можете изменить файл на месте (это верно для языков, отличных от julia), потому что добавление или удаление символов изменяет позиции всего, что следует после (файл представляет собой одну длинную строкубайт).
Таким образом, вы можете либо
- прочитать весь файл, изменить то, что вы хотите изменить, а затем записать весь файл в то же место
- читать построчно, писать в новое местоположение, а затем копировать новый файл в старое местоположение
Последнее, вероятно, лучше, если у вас действительно гигантские файлы (так что вы ненужно хранить все это в памяти).У вас есть большая часть кода, это всего лишь вопрос создания временного файла и последующего копирования обратно в исходный путь.Что-то вроде:
(tmppath, tmpio) = mktemp()
open(file) do io
for line in eachline(io)
if predicate(line)
line = modifier(line)
end
write(tmpio, line)
end
end
close(tmpio)
mv(tmppath, file, force=true)
ПРИМЕЧАНИЕ: если это находится в глобальной области видимости (например, не внутри функции), вам, возможно, придется поместить global
перед tmpio
внутри блока do
,В качестве альтернативы, оберните все это в let
. Смотрите здесь .