python 如何打印压缩文件的百分比

2024-01-06

我想获取压缩文件时的百分比。例如它会打印 1%、2%、3% 等。我不知道从哪里开始。我现在只有压缩文件的代码,该怎么做呢?

Code:

zipPath = zipfile.ZipFile("Files/Zip/" + pic + ".zip", "w")

for root, dirs, files in os.walk(filePath):
    for file in files:
        zipPath.write(os.path.join(root, file), str(pic) + "\\" + file)

print("Done")
zipPath.close()

不幸的是,您无法从 zipfile 模块获取每个单独文件的压缩进度,但您可以通过跟踪到目前为止已处理的字节数来了解总进度。

正如 Mikko Ohtamaa 所建议的,最简单的方法是遍历文件列表两次,第一次确定文件大小,第二次进行压缩。然而,正如凯文提到的,目录的内容可能会在这两次传递之间发生变化,因此数字可能不准确。

下面的程序(为 Python 2.6 编写)说明了该过程。

#!/usr/bin/env python

''' zip all the files in dirname into archive zipname

    Use only the last path component in dirname as the 
    archive directory name for all files

    Written by PM 2Ring 2015.02.15

    From http://stackoverflow.com/q/28522669/4014959
'''

import sys
import os
import zipfile


def zipdir(zipname, dirname):
    #Get total data size in bytes so we can report on progress
    total = 0
    for root, dirs, files in os.walk(dirname):
        for fname in files:
            path = os.path.join(root, fname)
            total += os.path.getsize(path)

    #Get the archive directory name
    basename = os.path.basename(dirname)

    z = zipfile.ZipFile(zipname, 'w', zipfile.ZIP_DEFLATED)

    #Current data byte count
    current = 0
    for root, dirs, files in os.walk(dirname):
        for fname in files:
            path = os.path.join(root, fname)
            arcname = os.path.join(basename, fname)
            percent = 100 * current / total
            print '%3d%% %s' % (percent, path)

            z.write(path, arcname)
            current += os.path.getsize(path)
    z.close()


def main():
    if len(sys.argv) < 3:
        print 'Usage: %s zipname dirname' % sys.argv[0]
        exit(1)

    zipname = sys.argv[1]
    dirname = sys.argv[2]
    zipdir(zipname, dirname)


if __name__ == '__main__':
    main()

请注意,我使用以下命令打开 zip 文件zipfile.ZIP_DEFLATED压缩参数;默认是zipfile.ZIP_STORED,即不执行压缩。此外,zip 文件可以处理 DOS 风格和 Unix 风格的路径分隔符,因此您不需要在存档路径名中使用反斜杠,正如我的代码所示,您可以使用os.path.join()构造存档路径名。


顺便说一句,在你的代码中你有str(pic)在你的内心深处for环形。一般来说,在循环内重新评估具有常量参数的函数有点浪费。但在这种情况下,这是完全多余的,因为从你的第一个声明来看,pic已经是一个字符串了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 如何打印压缩文件的百分比 的相关文章

随机推荐

  • 通过对行进行分组来转换数据框

    d1 lt data frame Gender c M M M M F F F F Age c 15 38 17 35 26 24 20 26 如果可能的话 我想把它改成这样 Gender Age M 15 38 17 35 F 26 24
  • 找不到 com/razorpay/Y_$B$$5 的外部类 com/razorpay/Y_$B$

    我正在实施RazorPay安卓结帐 我跟着Razorpay Android sdk 文档 https docs razorpay com v1 page android运行应用程序 gradle 时 构建失败并出现此错误 我也在 Razor
  • 如何确认 href 标签中链接的导航? [复制]

    这个问题在这里已经有答案了 我在管理面板中使用简单的链接 但如果用户意外单击链接进行用户删除 应该会弹出一个确认窗口来避免这种情况 正如您所知 href 标签可能与 javascript 不完全兼容 所以 我使用了 onclick 的spa
  • 如何缓存 Spark 数据框并在另一个脚本中引用它

    是否可以缓存数据帧 然后在另一个脚本中引用 查询 它 我的目标如下 在脚本 1 中 创建一个数据框 df 运行脚本1并缓存df 脚本2中 查询df中的数据 无法使用标准 Spark 二进制文件 火花DataFrame与具体的SQLConte
  • 获取 python 函数中使用/调用的函数列表

    是否有任何工具 库可以列出在另一个方法 函数中调用的方法 函数的列表 例如 如果该工具或库针对以下方法运行 def calculate a int b int operator Operator if operator Operator a
  • C++中的using和include有什么区别?

    我知道 include 用于类 using 用于一些内置的东西 比如命名空间 std 当你包含某些东西时 你可以创建对象并使用它们 但是当你 使用 某些东西时 你可以使用某种内置函数 但是我应该如何创建我自己可以 使用 的 库 呢 简单的说
  • Heroku Symfony 3.2 推送被拒绝,无法编译 PHP 应用程序

    我在 Heroku 上部署 symfony Web 应用程序时遇到了麻烦 而以前它工作得很好 可能出什么问题了 这是构建日志 http pastebin com DXZH110S http pastebin com DXZH110S 这是日
  • WCF服务向客户端发送数据

    是否可以在没有请求的情况下将数据从 WCF 服务发送到客户端 例如 在 WCF 中 我有循环发送数据的函数 我怎样才能实现该功能 这可以通过以下方式实现全复式合同 https msdn microsoft com en us library
  • codecov.io 与 Bitbucket 管道结合时出现错误

    我确实在 Bitbucket 上设置了一个私人存储库来托管 PHP 项目 对于这个项目 我还使用了管道集成 这是我的管道 yaml 文件的内容 image php 7 1 4 pipelines default step script in
  • python 与 c/fortran 的比较

    我编写了以下程序来比较 python 与 c fortran 的速度 为了获取程序使用的时间 我使用了 time 命令 一切 程序计算 x 的平方根x yy z z 其中 x y z 是浮点数 我使用了平方根 因为它是最耗时的部分之一 科学
  • C++:a 的 b 次幂模 k [重复]

    这个问题在这里已经有答案了 a b 模 k问题 编写一个程序来计算模 k 的 b 次幂 例如 如果要求您计算 2 6 mod 7 2 的 6 次方是 64 因此 64 模 7 是 1 输入规格您将得到 3 个整数 a b 和 k 其中 b
  • heroku db:push 显示无效的数据库 url

    我正在尝试使用以下方法将数据推送到 heroku 应用程序 heroku db push 但它吐出了这个错误 root ubuntu lappy rails soft heroku db push Invalid database url
  • MongoDB。 BadValue:使用副本集启用授权时需要 security.keyFile

    我正在尝试配置副本集Mongo in a Docker容器 我已将副本集添加到mongod conf file replication replSetName rs0 但在启动过程中我遇到了下一个异常 BadValue security k
  • 使用 ADO.NET 管理数据库连接

    我们有一个基于 ADO NET 构建的应用程序 我们遵循一些简单的最佳实践 使我们能够利用连接池 例如 使用数据库的代码块可能如下所示 using DbConnection dbConnection GetDatabaseConnectio
  • scrollOverflow 在 fullPage.js 中不起作用

    我最近开始在一个项目中使用 fullPage js 但我不知道如何让溢出滚动起作用 我的页面中的最后一个 部分 很长 因此需要垂直滚动 这是我里面的代码 tags
  • 在 JAR 中指定 JVM 堆大小

    我正在尝试编写一个游戏引擎 但它需要比默认设置更多的内存 我知道如果您双击一个 jar 则会使用默认设置 那么我是否可以指定 JAR 在其清单文件 或其他地方 中需要自定义堆大小 此外 引擎位于它自己的 jar 中 游戏位于另一个 jar
  • 在 Python 包中包含 *.pyd 文件

    我有一个 python 模块模块 pyd一旦手动将其放入 python 安装文件夹的站点包中 它就可以正常工作 当我将解决方案上传到云环境时 问题就开始了 构建包要求我将每个模块作为要安装的包传递pip install module 我创建
  • 如何覆盖Resources.Designer.cs中默认的System.Resources.ResourceManager?

    我想覆盖System Resources ResourceManager from Resources Designer cs文件来实现自定义 ResourceManager GetString 方法功能 这可能吗 我创建了一个Custom
  • 在任何其他方法调用之前自动调用方法

    我有大量的类继承大量的接口 这些类正在实现的接口不共享任何公共方法 但它们都共享一个公共的第一步 一个例子是 A类看起来像这样 class A InterfaceA GetFoo Database db PerformSetup db Th
  • python 如何打印压缩文件的百分比

    我想获取压缩文件时的百分比 例如它会打印 1 2 3 等 我不知道从哪里开始 我现在只有压缩文件的代码 该怎么做呢 Code zipPath zipfile ZipFile Files Zip pic zip w for root dirs