我有以下日志文件的结构:
/var/log/2013-12-24.tar.gz此文件包含:
2013-12-24/{00,01,02...23}.log.gz 文件
我需要使用Python解析这些文件,
而不提取磁盘或内存上的任何文件
有什么建议吗?
发布于 2013-06-05 18:35:05
这在.tar.gz中是不可能的,这就是原因。
为了创建.tar.gz文件,您必须首先tar它以创建单个.tar文件,然后gzip结果。
可以在不读取整个文件的情况下扫描.tar文件,但只有当tar归档的成员相对较大时,它才能很好地工作。这是因为tar没有在一个紧凑的地方列出所有成员的头。每个归档成员都有512个字节的描述符,然后显示下一个成员的位置。对于大型归档成员,您可以相对快速地在磁盘上找到任意成员内容,但您必须多次使用lseek()。
但是,一旦在.tar之上应用gzip,基本上就不可能快速获得存档的所有成员的列表,更不用说实际解压它们的内容了。您被迫解压缩整个归档,甚至只是为了获得其所有成员的列表。
请注意,流行的.tar.bz2或.tar.xz格式也存在完全相同的问题。
您可以使用zip格式进行修复。与.tar.gz相比,zip有很大的优势,因为它确实具有紧凑的索引,可以在一个地方列出所有归档成员,并且它允许快速读取该列表并只提取您需要的文件,而不必提取(gunzip) .tar.gz所遭受的整个归档。
发布于 2013-06-12 15:22:53
我找到了一个解决方案。我只在这里给出它作为参考:
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)https://stackoverflow.com/questions/16937391
复制相似问题