python压缩/解压gzip 大文件

liftword3个月前 (03-03)技术文章28

最近处理线上日志,日志文件刚好是经过压缩的,且是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()


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

相关文章

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

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

15《Python 办公自动化教程》文件压缩与解压缩

压缩包也是我们平时工作中经常要接触到的文件格式,压缩文件后缀名通常有 .zip、.rar、.7z 等等。Python 中也有专门用来操作压缩包文件的第三方模块 zipfile。听这个名字就知道是用来操...

Python 实现图片大小压缩

起因截图组件配合验证码使用优化建议既然没人帮忙解决只能自己动手了小白先直接献上代码from PIL import Imageimport osdef compress_image(infile, ou...

Python 简单的解压缩算法

line = input().strip() need_ch = [] for i in range(len(line)): if line[i].isalpha(): if...

用 Python 库 PySimpleGUI 制作自动化办公小软件

来源丨Python自动化办公社区链接https://blog.csdn.net/lys_828/article/details/11123856Python 在运维和办公自动化中扮演着重要的角色,P...