我的日志文件结构如下:
/var/log/2013-12-24.tar.gz
这个文件有:
2013-12-24/{00,01,02...23}.log.gz
文件
我需要使用 Python 解析这些文件,
无需提取磁盘或内存中的任何文件
有什么建议吗?
请您参考如下方法:
这对于 .tar.gz 是不可能的,这就是原因。
为了创建.tar.gz 文件,您必须先tar 以创建单个.tar 文件,然后gzip 结果。
.tar 文件可以在不读取整个文件的情况下进行扫描,但它只有在 tar 存档的成员相对较大时才能正常工作。这是因为 tar 没有任何将所有成员列在一个紧凑位置的 header 。每个文件成员都有 512 字节的描述符,而不是显示下一个成员所在的位置。对于大型存档成员,您可以相对快速地在磁盘上找到任意成员内容,但您将不得不多次 lseek()。
但是,一旦您在 .tar 之上应用 gzip,基本上就不可能快速获取存档的所有成员列表,更不用说实际获取了他们的内容未压缩。您被迫解压缩整个文件,甚至只是为了获得其所有成员的列表。
请注意,流行的 .tar.bz2 或 .tar.xz 格式存在完全相同的问题。
您可以使用zip 格式修复它。 zip 比 .tar.gz 有很大的优势,因为它确实有一个紧凑的索引,可以在一个地方列出所有存档成员,并且它允许快速读取该列表并仅提取文件您需要的,而无需提取(gunzip).tar.gz 遭受的整个存档。
