如何将 Julia 流转换为 Python 包的“字节内容”?

How I do convert a Julia stream to "byte content" for a Python package?

提问人:Antonello 提问时间:9/2/2022 更新时间:9/2/2022 访问量:117

问:

我维护 OdsIo.jl,一个 Julia 包,专门为 ods 文件包装 ezodf,一个用于各种 OpenDocument 格式的 Python 包,

我的“ods_readall”函数从调用 开始。ezodf.opendoc

ezodf.opendoc支持作为输入,除了文件名之外,文件字节内容本身:

ezodf.opendoc(filename)¶
    Parameters: filename (str) – a filename or the file-content as bytes

有没有办法将它与 Julia 流(例如,这个问题中的网络 gzipped 文件)一起使用纯文件?

Python IO Julia

评论

1赞 Bill 9/2/2022
bytes = read("myfile.odt")在 Julia 中以字节数组(无符号 8 位字符)的形式为您提供文件,只要您知道 Python 包的期望,它应该可以作为字节传递给 Python。您也可以从 Julia IO 流中获取字节,bytes = read(iostream)

答:

0赞 Antonello 9/2/2022 #1

这似乎有效,至少对于 HTTP,这就是我感兴趣的:

using HTTP, Pipe, PyCall

const  pyio  = PyNULL()
const  ezodf = PyNULL()

copy!(pyio, pyimport("io"))
copy!(ezodf, pyimport("ezodf"))

function readstream(istream)
    return ezodf.opendoc(pyio.BytesIO(istream))
end

urlData = "https://github.com/sylvaticus/OdsIO.jl/raw/master/test/spreadsheet.ods"

doc = @pipe HTTP.get(urlData).body |> readstream(_)