如何使用 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 文件?