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 如何打印压缩文件的百分比 的相关文章

  • RTSP 设置后接收 RTP 数据包

    我正在尝试使用 Python 从 IP 摄像机流式传输 RTP 数据包 我能够使用 RTSP 协议发送描述 设置和播放命令 但是 我无法开始使用 RTP 传输实际视频流 这是代码 import socket def printrec rec
  • R 的 ggplot2 有 Python API 吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我的问题就像标题一样简单 我想使用R s ggplot2但我所有的数据处理都是在Python 有没有Py
  • 在 MAC OS X 10.9 上安装 NLTK 确实很困难

    我是 Python Mac OS 新手 我正在寻找 NLTK 教科书 但我在安装它时遇到了一些问题 我一直在寻找解决方案 但不幸的是 所有解决方案似乎都不适合我 或者我误解了如何使用它们 我遇到的基本问题是 尽管按照说明进行操作 NLTK
  • Python极坐标图:绘制与角度对应的值

    我正在尝试绘制以不同角度记录的传感器数据 import pandas as pd import matplotlib pyplot as plt create dataframe each row contains an angle and
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts

随机推荐

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

    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