python压缩/解压gzip 大文件

liftword2个月前 (03-03)技术文章14

最近处理线上日志,日志文件刚好是经过压缩的,且是gz后缀。自己便采用gzip库来处理。

示例如下:

创建gzip文件

# -- coding: utf-8 --
import gzip

"""
创建gzip文件
"""
content = """
侠客行
李白 〔唐代〕

赵客缦胡缨,吴钩霜雪明。
银鞍照白马,飒沓如流星。
十步杀一人,千里不留行。
事了拂衣去,深藏身与名。
闲过信陵饮,脱剑膝前横。
将炙啖朱亥,持觞劝侯嬴。
三杯吐然诺,五岳倒为轻。
眼花耳热后,意气素霓生。
救赵挥金槌,邯郸先震惊。
千秋二壮士,烜赫大梁城。
纵死侠骨香,不惭世上英。
谁能书阁下,白首太玄经。
"""
f = gzip.open('xiakexing.txt.gz', 'wb')
f.write(str.encode(content))
f.close()



解压gzip文件

# -- coding: utf-8 --
import gzip

"""
解压gzip文件
"""
f = gzip.open('xiakexing.txt.gz', 'rb')
file_content = f.read().decode('utf-8')
f.close()

print(file_content)



压缩现有gzip文件

# -- coding: utf-8 --
import gzip

"""
gzip压缩现有文件
"""
f_in = open('file.txt', 'rb')
f_out = gzip.open('file.txt.gz', 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()


处理大文件

真正在生产可能会存在比较大的文件,直接解压肯定是不行了。可能会报错,例如:



所以可以采用循环处理,加入一定的缓冲机制,例如:

# -- coding: utf-8 --
import gzip
import os

buf_size = 1024 * 8


def gzip_file(src, dst):
    fin = open(src, 'rb')
    fout = gzip.open(dst, 'wb')
    in2out(fin, fout)


def gunzip_file(gz_file, dst):
    fin = gzip.open(gz_file, 'rb')
    fout = open(dst, 'wb')
    in2out(fin, fout)


def in2out(fin, fout):
    while True:
        buf = fin.read(buf_size)
        if len(buf) < 1:
            break
        fout.write(buf)

    fin.close()
    fout.close()


再次执行就能看到大文件,正常解压了

相关文章

最全RAR文件操作指南:如何用Python压缩、解压与筛选文件

引言:Python 对 .rar 文件进行压缩、解压以及筛选特定文件的操作代码封装一下import os import rarfile #todo 用于处理 RAR 文件 import zipfil...

20 天学 Python 文件操作:Day 8 压缩与解压文件

在日常开发中,压缩和解压文件是处理文件操作的常见需求。Python 提供了丰富的内置模块,比如 zipfile 和 shutil,让我们能够高效地压缩和解压文件。今天我们将学习如何使用这些模块进行操作...

20 天学 Python 文件操作:Day 16 文件压缩与解压

在日常工作中,我们经常需要对文件进行压缩和解压操作以减少存储空间或方便文件传输。今天,我们将学习如何使用 Python 进行文件的压缩与解压。1. 使用 zipfile 模块进行 ZIP 文件操作创建...

Python全能压缩:ZIP的压缩、解压、文件筛选与删除,一键搞定!

引言:这个方法实现了文件压缩与解压的常见操作,涵盖内容如下:1、从文件夹创建 ZIP 文件 2、从文件夹创建 ZIP 文件(筛选特定文件) 3、解压 ZIP 文件中的所有内容 4、解压 ZIP...

使用 Python 压缩 PDF 或减小 PDF 文件大小的 5 种方法

在存储、共享和传输方面,处理大型 PDF 文件可能是一个真正的挑战。PDF 压缩提供了一种有效的解决方案来减小文件大小,使文档更易于管理并优化存储使用情况。压缩的 PDF 文件具有几个关键优势:降低存...

python散装笔记——131: 解压文件

为了提取或解压缩tarball(tar归档文件)、ZIP文件或gzip文件,Python分别提供了tarfile、zipfile和gzip模块。Python的tarfile模块提供了TarFile.e...