gpt4 book ai didi

Julia:在 Zip 文件中提取 Zip 文件

转载 作者:行者123 更新时间:2023-12-03 15:53:18 26 4
gpt4 key购买 nike

我正在使用 Julia 的 ZipFile 包来提取和处理 csv 文件。没问题,但是当我在 zip 文件中遇到 zip 文件时,我也想处理它,但遇到错误。

Julia ZipFile 文档在这里:https://zipfilejl.readthedocs.io/en/latest/

这是代码:

using ZipFile
using DataFrames
function process_zip(zip::ZipFile.ReadableFile)

if split(zip.name,".")[end] == "zip"

r = ZipFile.Reader(zip) #error: MethodError: no method matching seekend(::ZipFile.ReadableFile)

for f in r.files
process_zip(f)
end
end

if split(zip.name,".")[end] == "csv"
df = readtable(zip) #for now just read it into a dataframe
end

end

r = ZipFile.Reader("yourzipfilepathhere");

for f in r.files
process_zip(f)
end
close(r)

对 ZipFile.Reader 的调用给出了错误:
MethodError: no method matching seekend(::ZipFile.ReadableFile)
Closest candidates are:
seekend(::Base.Filesystem.File) at filesystem.jl:191
seekend(::IOStream) at iostream.jl:57
seekend(::Base.AbstractIOBuffer) at iobuffer.jl:178
...

Stacktrace:
[1] _find_enddiroffset(::ZipFile.ReadableFile) at /home/chuck/.julia/v0.6/ZipFile/src/ZipFile.jl:259
[2] ZipFile.Reader(::ZipFile.ReadableFile, ::Bool) at /home/chuck/.julia/v0.6/ZipFile/src/ZipFile.jl:104
[3] process_zip(::ZipFile.ReadableFile) at ./In[27]:7
[4] macro expansion at ./In[27]:18 [inlined]
[5] anonymous at ./<missing>:?

因此,ZipFile 包似乎无法处理来自 zip 文件的 zip 文件,因为它无法对其进行搜索。

关于如何做到这一点的任何想法?

最佳答案

解决方法是将 zip 文件读入 IOBuffer。 ZipFile.Reader 能够处理 IOBuffer。这是工作代码:

using ZipFile
using DataFrames
function process_zip(zip::ZipFile.ReadableFile)

if split(zip.name,".")[end] == "zip"

iobuffer = IOBuffer(readstring(zip))
r = ZipFile.Reader(iobuffer)

for f in r.files
process_zip(f)
end
end

if split(zip.name,".")[end] == "csv"
df = readtable(zip) #for now just read it into a dataframe
end

end

r = ZipFile.Reader("yourzipfilepathhere");

for f in r.files
process_zip(f)
end
close(r)

关于Julia:在 Zip 文件中提取 Zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44876852/

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