我的日志文件结构如下:
/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
遭受的整个存档。
关于python - 在 tar gzip 文件中逐行解析 gzip 日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16937391/