如何使用 Julia 处理 zip 文件

Posted

技术标签:

【中文标题】如何使用 Julia 处理 zip 文件【英文标题】:How to process a zipfile using Julia 【发布时间】:2018-05-08 12:24:26 【问题描述】:

我正在努力处理压缩文件,例如:

julia> using CodecZlib

julia> text = open("2004_CORE.zip")
iostream(<file 2004_CORE.zip>)

我有几个这类文件要处理。每个都将包含至少一个 gzip 压缩的 xml 文件和一个或多个纯文本 csv 文件。

我的问题是:如何确定 zip 文件中包含哪些文件和文件类型?以及如何分别流式传输这些文件以便能够使用 LightXML 处理 XML 文件和使用 DataFrames 处理 CSV 文件?

【问题讨论】:

【参考方案1】:

zlib 本身并不处理 zip 文件。请注意, zip 和 gzip 是两个不同的东西。您需要一些能够解析 zip 文件格式的东西。 ZipFile 可能会有所帮助。

如果您不想使用据说很慢的 ZipFile,那么您将需要自己挑选 zip 文件格式。您可以找到它记录在案的here。然后,您可以使用 CodecZlib 的 deflate 功能来解压缩每个 zip 文件条目中包含的原始 deflate 数据。 (几乎所有的 zip 文件都只使用 deflate 或 stored 方法。)

【讨论】:

感谢您的努力。我非常了解文件类型之间的差异。 CodecZlib 可以处理 Gzip 和 Zip 文件。这不是我的问题的重点。如果您查看discourse.julialang.org/t/reading-files-embedded-in-a-zip-file/…,您会发现有人建议我使用 CodecZlib,而 Zipfile 本身就有问题。 这个:github.com/bicycle1885/CodecZlib.jl ?如果是这样,它不处理 zip 文件。只有 zlib、gzip 和 deflate。您评论中的链接与您所说的相反。它说 “我曾希望对 ZipFiles.jl 进行现代化改造,或者为 zip 存档编写类似 CodecZlib 的包,但一直没有时间这样做。结果我放弃了对 zip 存档的支持并建议我们的用户改用 gzip 压缩。” 从 CodecZlib.jl 的 README 中:此包导出以下编解码器和流: Codec Stream GzipCompressor GzipCompressorStream GzipDecompressor GzipDecompressorStream ZlibCompressor ZlibCompressorStream ZlibDecompressor ZlibDecompressorStream DeflateCompressor DeflateCompressorStream DeflateDecompressor DeflateDecompressorStream 感谢您对pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT 的引用。很有价值。 @JohannSpies 没错。 gzip、zlib 或 deflate 都不是 zip 格式。 CodecZlib 处理 zip 文件。您可能会发现this answer 很有用。

以上是关于如何使用 Julia 处理 zip 文件的主要内容,如果未能解决你的问题,请参考以下文章

处理多种类型和数组时如何编写“好”的 Julia 代码(多重分派)

如何使用 Julia 创建具有多张工作表的 excel 文件?

如何在 Windows 批处理文件中使用 7zip 从 ZIP 存档中提取最后一个目录?

如何在Julia中加载IQFeed数据

如何在 Windows 上使用多个版本的 Julia

在文件上使用 cmd 或 linux 终端时如何启用颜色?