You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python2.7脚本如何将HTML压缩方式从(pk)zip改为gzip

Python2.7 词典脚本Zip转Gzip压缩修改方案

第一步:修改导入语句

找到原代码第9行的导入行,删除不需要的zipfile模块,新增gzip模块即可,修改后如下:

import sqlite3, sys, gzip, zlib, os

gzip是Python2.7标准库内置模块,不需要额外安装第三方包。

第二步:替换压缩逻辑

找到原代码标注# compress & save的压缩块、以及后续读取压缩文件的代码段(原71-78行左右),直接替换为以下代码即可,完全适配原有数据库插入流程:

# compress & save
with gzip.open('_temp', mode='wb') as gf:
    gf.write(html)

# read & insert compressed data
with open('_temp', 'rb') as temp_compressed:
    compressed = temp_compressed.read()

说明:和Zip归档格式不同,gzip是单流压缩格式,不需要先把HTML内容写到TEMP_DIRECTORY下的临时文件再读取压缩——代码里已经有存储完整HTML内容的html变量,直接把变量内容写入gzip压缩流即可,输出的二进制格式和电子阅读器要求的gzip词典格式完全兼容。

可选性能优化

原脚本每处理一个词条就会做多次磁盘IO(写临时HTML、写临时压缩包、读临时压缩包、删临时HTML),词条量大的时候速度很慢,可以直接把从# create html file到os.remove(TEMP_DIRECTORY + term_stripped)这一段的临时文件逻辑全部删掉,在内存里完成压缩,不需要读写任何中间临时文件,对应段代码修改如下:

# 省略前面的termEdited、duplicateCount判断逻辑
    # create HTML
    html = '<b>' + term + '</b>' + data[0].strip()

    # 内存直接gzip压缩,不需要临时文件
    import io
    compressed_buffer = io.BytesIO()
    with gzip.GzipFile(fileobj=compressed_buffer, mode='wb') as gf:
        gf.write(html)
    compressed = compressed_buffer.getvalue()

    # 直接插入数据库
    cur.execute('INSERT INTO tblWords (_id, term, description) VALUES(?, ?, ?)', (index, termEdited, sqlite3.Binary(compressed)))

    # if duplicate then update previous row with [1]
    if duplicateCount == 2:
      cur.execute('UPDATE tblWords SET term="' + str(term + "[1]") + '" WHERE _id=' + str(index - 1) + '')
    
    prevTerm = term

用内存压缩的话,连一开始创建TEMP_DIRECTORY的逻辑都可以删掉,处理速度会提升数倍。

注意事项

  • 如果目标电子阅读器要求特定的gzip压缩级别,可以在gzip.open或者GzipFile初始化时加compresslevel参数,取值范围1-9,默认是9(最高压缩率,压缩速度最慢),比如gzip.open('_temp', 'wb', compresslevel=6)就是平衡压缩率和速度的常用配置。
  • 脚本跑完记得把最后注释掉的os.remove('_temp')打开,避免目录下残留临时文件。
  • 改完可以先拿前10个词条测试,从数据库读出blob内容用gzip解压,确认和原HTML内容一致再全量跑库。

内容的提问来源于stack exchange,提问作者nmyshkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:03:29