gpt4 book ai didi

io - Julia:IO/文件数据的流式转换

转载 作者:行者123 更新时间:2023-12-04 03:35:18 24 4
gpt4 key购买 nike

这似乎是一个简单的问题,但我无法弄清楚如何在 Julia 中做到这一点。我们收到文本文件,但它们有“\01”或“\00”作为换行符。这些文件部分较大(~10 GB),这就是为什么我们要为文件内容打开一个流,将‘\01’映射到‘\r’,然后继续读取这些行。类似于(伪代码):

open("myfile.dat", read=true) do fd
fd = replace(fd, '\01' => '\r')
for line in eachline(fd)
...
end
end

它最好能处理来自文件、cmd 和 IOBuffer 的输入。

我知道我们可以调用外部命令来进行翻译,但我们同时使用 Windows 和 Linux,并且我们想要一种可以在两者上轻松工作的方法。

鉴于这是一个具体的用例,我们想知道 IO 流处理在 Julia 中通常是如何工作的。是否已经有任何易于使用的东西?

非常感谢您的帮助

最佳答案

如果 '\01' 是唯一的分隔符,您可以使用 readuntil :

open("foo.txt"; read=true) do fd
while !eof(fd)
x = readuntil(fd, '\01')
@show x
end
end

如果您有多个定界符,您可以使用 Julia's readuntil 的修改版本:

function multireaduntil(s::IO, delims::Vector{<:AbstractChar}; keep::Bool=false)
out = IOBuffer()
for c in readeach(s, Char)
if c in delims
keep && write(out, c)
break
end
write(out, c)
end
return String(take!(out))
end

你可以这样使用:

open("foo.txt"; read=true) do fd
while !eof(fd)
x = multireaduntil(fd, ['\00', '\01'])
@show x
end
end

如果您需要更高级的解析,我建议您使用类似 TextParse.jl 的东西

关于io - Julia:IO/文件数据的流式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67021957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com