有办法可以把 progressbar2 和 tarfile 结合起来用吗?

2019-10-25 16:49:32 +08:00
 CivAx

有一个约 19GB 的 tar.gz 零散文件包需要解压(解压后约 80G ),由于是有人值守,所以迫切需要一个进度条。

tarfile 代码:

import tarfile

filepath ="/data/someWhere/2019"
list = '(tarfile.open("/data/someWhere/2019.gz").getnames())'   # list
for n in list:
  tar.extract(n. filepath)
tar.close()

progress2 代码:

import progress

size=len(list)  # int, e.g.127
with progressbar.ProgressBar(
  widgets=[progressbar.SimpleProgress()],
  max_value=(size)) as bar:
  
  for i in range(size):
    bar.update(i+1)
  bar.finish()

尝试了把 progress2 的方法插入到 tarfile 的 for 循环当中,由于是用的 extract 而不是 extractall,导致进度条完全没有效果,全部解压完毕后会从 0 直接到 100%(包内有 127 个文件)。

如果反过来插入,会导致压缩包被重复解压 ${文件数量} 次。

1950 次点击
所在节点    Python
2 条回复
by73
2019-10-25 23:05:51 +08:00
照着你的代码合并了一次,没有任何问题啊 https://pastebin.com/rJRhQcnn
CivAx
2019-10-26 10:37:34 +08:00
@by73 #1 您试一下在压缩包中打包多个目录与文件,应该会出现我描述的问题了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/612998

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX