我可以读取文件并根据这样的谓词找到特殊行
open(file, read=true, write=true, append=true) do io
for line in eachline(io)
if predicate(line)
new_line = modifier(line)
# how to replace the line with new_line in the file now?
end
end
end
Run Code Online (Sandbox Code Playgroud)
但现在如何更改文件中的内容呢?
一般来说,您无法就地修改文件(对于 Julia 以外的语言也是如此),因为添加或删除字符会改变后面所有内容的位置(文件只是一长串字节)。
所以你可以
如果您有非常大的文件,后者可能会更好(因此您不必将整个文件存储在内存中)。您已经获得了大部分代码,只需创建一个临时文件,然后最后复制回原始路径即可。就像是:
(tmppath, tmpio) = mktemp()
open(file) do io
for line in eachline(io, keep=true) # keep so the new line isn't chomped
if predicate(line)
line = modifier(line)
end
write(tmpio, line)
end
end
close(tmpio)
mv(tmppath, file, force=true)
Run Code Online (Sandbox Code Playgroud)
注意:如果这是在全局范围内(例如,不在函数内部),您可能必须将其放在块内部的global前面。或者,将整个内容包装在. 看这里。tmpiodolet