在 Julia 中切碎一个文件
Chop a file in Julia
我在 Julia 中打开了一个文件:
output_file = open(path_to_file, "a")
我想删除文件的最后六个字符。
我以为我可以用 chop
来做到这一点,即 chop(output_file; tail = 6)
但它似乎只适用于 String
类型而不适用于 IOStream
。我该怎么办?
julia> rbothpoly(0, 1, [5], 2, 30, "html")
ERROR: MethodError: no method matching chop(::IOStream; tail=6)
Closest candidates are:
chop(::AbstractString; head, tail) at strings/util.jl:164
Stacktrace:
[1]
[...] ERROR STACKTRACE [...]
[3] top-level scope at REPL[37]:1
我是 IOStream 的新手,今天发现了它们。
我找到了 ,它适用于我的问题:
(tmppath, tmpio) = mktemp()
open(output_filename, "r") do io
for line in eachline(io, keep=true) # keep so the new line isn't chomped
if line == "</pre>\n"
line = "\n"
end
write(tmpio, line)
end
end
close(tmpio)
mv(tmppath, output_filename, force=true)
chmod(output_filename, 0o777)
close(output_file)
也许我的问题可以被标记为重复!
在你的例子中,因为你只对文件的末尾进行了一次写入,而不是做任何进一步的读取或其他操作,你也可以像这样就地编辑文件:
function choppre(fname = "data/endinpre.html")
linetodelete = "</pre>\n"
linelength = length(linetodelete)
open(fname, "r+") do f
readuntil(f, linetodelete)
seek(f, position(f) - linelength)
write(f, " "^linelength)
end
end
这会用等长的 space 个字符覆盖我们希望截断的文本。我不确定是否有办法简单地删除该行(而不是用 ' '
覆盖它)。
我在 Julia 中打开了一个文件:
output_file = open(path_to_file, "a")
我想删除文件的最后六个字符。
我以为我可以用 chop
来做到这一点,即 chop(output_file; tail = 6)
但它似乎只适用于 String
类型而不适用于 IOStream
。我该怎么办?
julia> rbothpoly(0, 1, [5], 2, 30, "html")
ERROR: MethodError: no method matching chop(::IOStream; tail=6)
Closest candidates are:
chop(::AbstractString; head, tail) at strings/util.jl:164
Stacktrace:
[1]
[...] ERROR STACKTRACE [...]
[3] top-level scope at REPL[37]:1
我是 IOStream 的新手,今天发现了它们。
我找到了
(tmppath, tmpio) = mktemp()
open(output_filename, "r") do io
for line in eachline(io, keep=true) # keep so the new line isn't chomped
if line == "</pre>\n"
line = "\n"
end
write(tmpio, line)
end
end
close(tmpio)
mv(tmppath, output_filename, force=true)
chmod(output_filename, 0o777)
close(output_file)
也许我的问题可以被标记为重复!
在你的例子中,因为你只对文件的末尾进行了一次写入,而不是做任何进一步的读取或其他操作,你也可以像这样就地编辑文件:
function choppre(fname = "data/endinpre.html")
linetodelete = "</pre>\n"
linelength = length(linetodelete)
open(fname, "r+") do f
readuntil(f, linetodelete)
seek(f, position(f) - linelength)
write(f, " "^linelength)
end
end
这会用等长的 space 个字符覆盖我们希望截断的文本。我不确定是否有办法简单地删除该行(而不是用 ' '
覆盖它)。