Python 在tar gzip文件中逐行分析gzip日志文件

Python 在tar gzip文件中逐行分析gzip日志文件,python,logfile-analysis,Python,Logfile Analysis,我有以下日志文件结构: /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没有在

我有以下日志文件结构:

/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
没有在一个紧凑位置列出所有成员的标题。每个存档成员都有512字节的描述符,用于显示下一个成员的位置。对于大型存档成员,您可以相对快速地在磁盘上找到任意成员内容,但您必须多次执行
lseek()

但是,一旦您在
.tar
之上应用了
gzip
,基本上就不可能快速获取归档文件中所有成员的列表,更不用说实际解压缩他们的内容了。您必须解压缩整个归档文件,甚至只需获取其所有成员的列表

请注意,对于流行的
.tar.bz2
.tar.xz
格式,也存在完全相同的问题


您可以使用
zip
格式修复它
zip
.tar.gz
有很大的优势,因为它有一个紧凑的索引,可以在一个地方列出所有存档成员,并且它允许快速读取该列表并只提取您需要的文件,而无需提取
.tar.gz
遭受的整个存档。

我找到了一个解决方案。我就在这里给大家参考一下:

import subprocess
file_name = /var/log/2013-06-10.tar.gz
gzip_data = subprocess.Popen(["tar", "-Oxf", file_name], stdout=subprocess.PIPE)
data = subprocess.Popen(["zcat"], stdin=gzip_data.stdout, stdout=subprocess.PIPE)
for line in data.stdout:
    do_my_process_on(line)

在不提取的情况下,我的建议是找到一个向导:)好的,那么我可以使用一些bash fu和一些子流程魔法来破解它吗?您仍然需要一些足够大的临时空间来保存原始
.tar.gz
的未压缩内容。如果您有大量内存,并且该归档文件不是很大(未压缩),那么它可以存储在
/tmp
中,作为
tmpfs
挂载(有效地存储在内存中!)