找回密码
 立即注册
相关推荐换一批
  1. TB/T 3124-2005 机车车辆制动用压缩空气质量等级及测量方法
  2. GB/T 5258-2008 纤维增强塑料面内压缩性能试验方法
  3. QJ 1714.8-1989 航天产品设计文件管理制度 文字内容设计文件的编制
  4. DA/T 22-2000 归档文件整理规则
  5. GB/T 10198.2-1988 传真机技术要求 二类文件传真机
  6. GB/Z 19736-2005 电子成像 文件图像压缩方法选择指南
  7. GB/T 3856-2005 单向纤维增强塑料平板压缩试验方法
  8. JB/T 5054.8-1991 产品图样及设计文件 通用件及借用件管理办法
  9. GB/T 12852-1991 磁控管总规范 (可供认证用)
  10. SJ/T 211.5-1997 电子工业专用设备设计文件 第5部分:编号方法
  11. GB 1683-1981 硫化橡胶恒定形变压缩永久变形的测定方法
  12. YY/T 0047-1991 医疗器械产品图样及设计文件的术语
  13. YD/T 703-1993 文件传真三类机检验测试方法
  14. YD/T 172-1994 邮电工业工艺文件格式
  15. TB/T 122-2001 机车车辆产品图样及设计文件编号原则
  16. QJ 903.9-1985 通用工艺文件编制规则
  17. CJ/T 166-2006 建设事业集成电路(IC)卡应用技术
  18. SJ/T 207.5-1999 设计文件管理制度 第5部分:设计文件的更改
  19. SJ/T 207.2-1999 设计文件管理制度 第2部分:设计文件的格式
  20. SJ/T 207.1-1999 设计文件管理制度 第1部分:设计文件的分类和组成
  21. GB/T 15387.1-1994 术语数据库开发文件编制指南
  22. NY/T 762-2004 蔬菜农业残留检测抽样规范
  23. MT 453-1995 隔绝式压缩氧呼吸器
  24. GB/T 3382-1993 文件传真三类机在电话网中的互通技术条件
压缩读取字节文件 | 软件设计/软件工程 2022-05-05 392 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 的用户会话