File 如何在julia中编辑文件的行?
我可以读取一个文件并根据这样的谓词找到一个特殊的行File 如何在julia中编辑文件的行?,file,io,julia,File,Io,Julia,我可以读取一个文件并根据这样的谓词找到一个特殊的行 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?
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
但是现在如何更改文件中的内容呢?一般来说,您不能就地修改文件(对于除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)
注意:如果这是在全局范围内(例如,不在函数内),您可能必须将
global
放在tmpio
前面的do
块内。或者,用let
将整个过程包装起来 这需要mv(tmppath,file,force=true)
,因为file
已经存在。而且mv
之前的close(tmpio)
也可以write(tmpio,line)
应该是write(tmpio,line*“\n”)
或者eachline(io)
应该是eachline(io,keep=true)
。否则,所有行都被连接。@Dominique:+1:已修复