Python 自动化办公实战课
尹会生
前游戏公司技术总监,前新浪网研发中心技术经理
21781 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 37 讲
Python 自动化办公实战课
15
15
1.0x
00:00/00:00
登录|注册

27|zipfile压缩库:如何给数据压缩&加密备份?

使用os.popen()函数封装命令行调用7z.exe
7z.exe的参数
命令搜索路径
使用zipfile库实现创建zip文件
使用strftime()函数转换日期格式
使用datetime库生成当天日期
yield语句的好处
使用os库实现目录遍历
扩展zipfile
执行方式和执行参数
把文件夹写入压缩文件
按日期自动生成压缩包的文件名
目录遍历
使用可执行命令实现有密码压缩
使用zipfile实现无密码压缩
思考题
怎么给数据压缩&加密备份

该思维导图由 AI 生成,仅供参考

你好,我是尹会生。
你在日常工作中,肯定和压缩文件打过交道,它们能把文件夹制作成一个体积更小的压缩文件,不仅方便数据备份,还方便作为邮件附件来传输,或者与他人共享。
但是如果你需要每天都进行数据备份,或者把压缩包作为每天工作的日报发送给领导,你肯定希望它能自动化的压缩。面对这个需求,我们同样可以通过 python 来解决。我们可以用 Python 来自动压缩文件夹,并为压缩包设置密码,保证备份数据的安全。
在 Python 中,要想实现数据的压缩,一般可以采用基于标准库 zipfile 的方式来实现,也可以采用命令行方式来实现。
当我们希望能够用 Python 自动压缩一个无需密码保护的文件夹时,可以通过 zipfile 来实现,它的好处是使用简单,而且不用安装任何的软件包,就能制作出“zip”格式的压缩包。不过 zipfile 没法对压缩文件进行加密,因此当你需要对压缩文件加密时,还需要调用可执行命令。
这两种实现方式就是我们今天要学习的重点了,接下来我们分别看一下这两种方式的具体操作方法。

使用 zipfile 实现无密码压缩

如果我想要把“C:\data\”文件夹压缩为“当前日期.zip”文件,就可以使用目录遍历、按日期自动生成压缩包的文件名、文件夹写入压缩文件三个步骤来实现。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Python中的zipfile压缩库和7zip软件为实现数据压缩和加密备份提供了重要工具。文章介绍了使用zipfile库实现无密码压缩的方法,包括目录遍历、自动生成压缩包的文件名以及将文件夹写入压缩文件的具体操作。同时,还介绍了使用可执行命令实现有密码压缩的方法,通过命令行方式调用实现文件的加密压缩。文章还提到了如何利用Python的popen()函数封装7z.exe,实现有密码文件压缩功能。总结指出无密码压缩文件简单方便,而有密码压缩文件更加安全,适合进行每日数据自动化备份。此外,还提到了新的函数返回方式yield的应用场景。整体而言,本文内容详实,适合读者快速了解并掌握相关技术特点。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Python 自动化办公实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • ifelse
    请问多个目录改怎么压缩?

    作者回复: 我为你写了两个demo,你参考一下用法: ### 1. 压缩多级目录到一个压缩包 以下代码将压缩一个包含多级子目录的目录到一个ZIP文件中。 ```python import zipfile import os def zipdir(path, ziph): # 遍历目录,添加文件到zip文件中 for root, dirs, files in os.walk(path): for file in files: ziph.write(os.path.join(root, file), os.path.relpath(os.path.join(root, file), os.path.join(path, '..'))) zip_file_path = 'example.zip' directory_to_zip = 'directory_to_compress' # 创建ZIP文件,并调用zipdir函数 with zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED) as zipf: zipdir(directory_to_zip, zipf) print(f'{directory_to_zip} has been compressed into {zip_file_path}') ``` ### 2. 压缩多个不同目录到一个压缩包 以下代码将压缩多个不同的目录到一个ZIP文件中。 ```python import zipfile import os def zipdir(path, ziph): # 遍历目录,添加文件到zip文件中 for root, dirs, files in os.walk(path): for file in files: ziph.write(os.path.join(root, file), os.path.relpath(os.path.join(root, file), os.path.join(path, '..'))) zip_file_path = 'multiple_directories.zip' directories_to_zip = ['dir1', 'dir2', 'dir3'] # 你可以将这里的目录替换为要压缩的目录 # 创建ZIP文件,并调用zipdir函数 with zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED) as zipf: for directory in directories_to_zip: zipdir(directory, zipf) print(f'Directories {directories_to_zip} have been compressed into {zip_file_path}') ``` 务必注意,你需要确保要压缩的目录存在,否则会引发异常。

    2023-07-24归属地:浙江
    2
  • 碧海蓝天
    老师,请问一下我使用7z.exe a -tzip -ppwd666 C:\files 并没有压缩成功,这是为什么呢?

    作者回复: 我提供给你两个建议,你可以尝试去解决一下这个问题。 第1个是可以先将这样的一条命令单独在命令行里运行。 这样做的好处是可以规避掉Python组合命令和执行权限等等一系列问题。如果在命令行执行是成功的,那么放到Python当中,应该就是Python组合命令的地方出现了问题。 第二个是你可以直接看程序的输出,如果没有正常压缩成功的话,在Python中一定会有错误提示,跟着错误提示找到代码的问题在哪一行以及错误提示具体的内容定位到出现错误的原因。

    2021-07-26
  • Soul of the Dragon
    老师,请问为什么我用zipWithPassword()函数对文件夹进行压缩后,生成的压缩包还是没有密码的状态呢?

    作者回复: zipWithPassword() 只能用于解压缩,它的详细描述写在官方文档中。所以我在课程中教你用命令行执行压缩就是这个目的了

    2021-04-15
  • LDxy
    使用 yield 返回的对象被称作生成器对象,该对象没法像列表一样,一次性获得对象中的所有数据,你必须使用 for 循环迭代访问,才能依次获取数据。这句话怎么理解呢?调用一次getAllFiles是返回一个数据还是返回所有数据?

    作者回复: 调用一次之后,会返回一个可迭代对象,可迭代对象默认只包含第一个元素,必须对它再次迭代,你才能获得下一个元素

    2021-04-13
  • ifelse
    学习打卡
    2023-07-24归属地:浙江
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部