找回密码
 立即注册
相关推荐换一批
  1. FZ/T 91003.8-1993 纺织机械制造工艺管理导则 工艺文件的修改
  2. FZ/T 91003.7-1993 纺织机械制造工艺管理导则 工艺文件标准审查
  3. FZ/T 91001.4-1993 纺织机械制造工艺文件 工艺装备设计图样及文件格式
  4. FZ/T 91001.1-1993 纺织机械制造工艺文件 工艺文件完整性及审批程序
  5. GB/T 13959-1992 文件格式分类与代码编制方法
  6. GB/T 13477.16-2002 建筑密封材料试验方法 第16部分: 压缩特性的测定
  7. GB/T 6034-1985 硫化橡胶压缩耐寒系数的测定
  8. GB/T 7314-1987 金属压缩试验方法
  9. GB/T 7042-1986 橡胶压缩或剪切性能的测定 (扬子尼机械示波器)
  10. GB/T 1964-1996 多孔陶瓷压缩强度试验方法
  11. SJ/T 207.8-2001 设计文件管理制度 第8部分:图样编制
  12. SJ/T 207.7-2001 设计文件管理制度 第7部分:电气简图的编制
  13. SJ/T 207.6-2001 设计文件管理制度 第6部分:项目代号
  14. JC/T 262-1993 铸石制品性能试验方法 压缩强度试验
  15. QB/T 1093-1991 家具实木胶接合顺纹压缩剪切强度的测定
  16. CF最新C++雷达源代码下载
  17. GB/T 17235.2-1998 信息技术 连续色调静态图像的数字压缩及编码 第2部分:一致性测试
  18. GB/T 16973.1-1997 信息技术 文本与办公系统 文件归档和检索(DFR) 第1部分:抽象服务
  19. GB/T 16722.4-1996 技术产品文件 计算机辅助技术信息处理 文件管理与检索系统
  20. GB/T 16722.3-1996 技术产品文件 计算机辅助技术信息处理 产品设计过程中的状态
  21. GB/T 16722.2-1996 技术产品文件 计算机辅助技术信息处理 原始文件
  22. GB/T 16686-1996 信息技术 信息交换用数据压缩 具有嵌入字典的自适应编码 DCLZ算法
  23. GB/T 16656.21-1997 工业自动化系统与集成 产品数据的表达与交换 第21部分:实现方法
  24. GB/T 16652-1996 开放文件体系结构(ODA)和互换格式 文件结构
压缩读取字节文件 | 软件设计/软件工程 2022-05-05 452 0star收藏 版权: . 保留作者信息 . 禁止商业使用 . 禁止修改作品
问题
我有很多 gzip 压缩的文本文件,我想在运行中(运行中)解压缩和读取,以节省磁盘空间和从磁盘读取数据的时间,而不是在线解压缩所花费的时间。

所以我使用 gzip 模块和 tqdm 来跟踪进度。

但是,如何找出原始未压缩文件大小的大小,以便在完成跟踪进度之前设置读取(未压缩)的总字节数?就我在搜索网络时所关心的而言,对于大于 4gb 的文件,这个问题在 gzip 中很难解决,这就是我的情况。

或者,我应该跟踪读取的压缩字节并将总字节设置为压缩文件的大小。

我该怎么做?

下面是一个代码示例,其中的注释也反映了我想要实现的目标。

我正在使用 Python3.5。
  1. import gzip
  2. import tqdm
  3. import os

  4. size = os.path.getsize('filename.gz')
  5. pbar = tqdm.tqdm(total=size, unit='b', unit_scale=True, unit_divisor=1024)

  6. with gzip.open('filename.gz', 'rt') as file:
  7.     for line in file:
  8.         bytes_uncompressed = len(line.encode('utf-8'))
  9.         # but how can I get compressed bytes read count?
  10.         # bytes_compressed = ...?

  11.         # pbar.update(bytes_compressed)
复制代码

回答
您应该打开以读取基础文件(以二进制模式) f = open('filename.gz', 'rb') 。然后打开上面的gzip文件。 g = gzip.GzipFile(fileobj=f) 。您可以从 g 读取,以了解您的距离,您可以请求 zip 文件中的位置。

EDIT2:顺便说一句。当然,您也可以在 f.tell() 实例上使用 tell() 来判断未压缩文件的长度(读取的字节数)。

编辑:现在我看到这只是您问题的部分答案。您还需要总数。恐怕你运气不好。尤其是您提到的 4GB+ 文件。 gzip 将未压缩的大小保留在最后四个字节中,因此您可以跳转到那里并读取它们并跳回(GzipFile 本身似乎不会公开此信息),但是由于它是四个字节,因此您只有 4GB可以存储为最大的数字,其余的将被截断为值的低 4B。那样的话,恐怕到最后你才知道。

总之,上面的提示为您提供了压缩和未压缩的当前位置,并希望让您至少在一定程度上实现您已经开始做的事情。





上一篇:Python/Pandas 计算 Ichimoku 图表组件
下一篇:使用 JWT 管理多个设备节点 js 的用户会话