• 【Python入门教程】批量压缩解压文件(zip、rar)


            好长一段时间没有更新了,最近手里的项目没停过太忙了。今天正好有空就分享下之前编写的一段代码。

            起因是因为我想将一些文件上传至网盘,但奈何太穷开不起会员,无法上传超过4G的文件。于是就想能不能使用Python实现批量压缩文件夹,搞都搞了顺便将解压文件夹也写出来了。今天就和大家分享一下。

    一、导入相关库

            os库是为了监测生成的文件夹是否已存在。主要的库是zipfile,它提供了有关windows下的文件/文件夹的压缩、解压的函数。

    1. import os
    2. import zipfile

    二、压缩文件

            今天偷个懒,就不一段一段的去解释了,直接整个函数展示。相关的注释已经写清楚了,主要函数就是zipfile.ZipFile和zip_file.write。zip_file.write(file_path,file_each)中,file_path是文件夹中文件的完整路径,file_each是文件名。

    1. def Compress_path_zip(path_all):
    2. path_all_list = os.listdir(path_all)
    3. # 列出总文件夹内所有需要压缩的文件夹
    4. for path_each in path_all_list:
    5. path_compress = os.path.join(path_all, path_each)
    6. # 待压缩的绝对路径
    7. if os.path.isdir(path_compress):
    8. print("正在压缩:%s" % path_each)
    9. # 遍历所有需要压缩的文件夹
    10. if os.path.exists(path_all + "%s.zip" % path_each):
    11. print(path_all + "%s1.zip" % path_each+"已存在,新文件名为'%s'" % (path_all + "%s1.zip" % path_each))
    12. zip_file = zipfile.ZipFile(path_all + "%s1.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
    13. # 创建的压缩对象用于执行后续操作
    14. # file_list = zip_file.namelist()
    15. # 列出压缩文件夹中所有文件
    16. else:
    17. zip_file = zipfile.ZipFile(path_all + "%s.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
    18. file_list = os.listdir(path_compress)
    19. # 待压缩文件夹内所有文件
    20. # zip_file.setpassword(b'123')
    21. for file_each in file_list:
    22. # 遍历所有文件夹内的文件
    23. file_path = os.path.join(path_compress, file_each)
    24. zip_file.write(file_path, file_each)
    25. zip_file.close()
    26. else:
    27. print(path_each, "不是文件夹,不进行压缩")
    28. continue

    三、解压文件

            这段代码就不细说了,反正修改了路径就能直接使用了。

    1. def Decompress_path_zip(path_all):
    2. path_all_list = os.listdir(path_all)
    3. for path_each in path_all_list:
    4. # 遍历所有需要压缩的文件夹
    5. if path_each.endswith('.zip'):
    6. print("正在解压:%s" % path_each)
    7. path_decompress = os.path.join(path_all, path_each)
    8. zip_file = zipfile.ZipFile(path_decompress, 'r') # 压缩文件位置
    9. for file in zip_file.namelist():
    10. if os.path.exists(path_decompress[:-4]):
    11. print("'%s'" % path_decompress[:-4], "已存在,新文件名为'%s'" % (path_decompress[:-4] + "1"))
    12. zip_file.extract(file, path_decompress[:-4] + "1") # 解压位置,pwd="1234".encode('utf-8')
    13. else:
    14. zip_file.extract(file, path_decompress[:-4]) # 解压位置
    15. zip_file.close()
    16. else:
    17. print(path_each, "非zip文件,不进行解压!")
    18. continue

    四、完整代码

    1. # -*- coding: utf-8 -*-
    2. """
    3. @Time : 2023/8/28 14:47
    4. @Auth : RS迷途小书童
    5. @File :Compress and Decompress Folders.py
    6. @IDE :PyCharm
    7. @Purpose:批量压缩/解压文件夹
    8. """
    9. import os
    10. import zipfile
    11. def Compress_path_zip(path_all):
    12. path_all_list = os.listdir(path_all)
    13. # 列出总文件夹内所有需要压缩的文件夹
    14. for path_each in path_all_list:
    15. path_compress = os.path.join(path_all, path_each)
    16. # 待压缩的绝对路径
    17. if os.path.isdir(path_compress):
    18. print("正在压缩:%s" % path_each)
    19. # 遍历所有需要压缩的文件夹
    20. if os.path.exists(path_all + "%s.zip" % path_each):
    21. print(path_all + "%s1.zip" % path_each+"已存在,新文件名为'%s'" % (path_all + "%s1.zip" % path_each))
    22. zip_file = zipfile.ZipFile(path_all + "%s1.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
    23. # 创建的压缩对象用于执行后续操作
    24. # file_list = zip_file.namelist()
    25. # 列出压缩文件夹中所有文件
    26. else:
    27. zip_file = zipfile.ZipFile(path_all + "%s.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
    28. file_list = os.listdir(path_compress)
    29. # 待压缩文件夹内所有文件
    30. # zip_file.setpassword(b'123')
    31. for file_each in file_list:
    32. # 遍历所有文件夹内的文件
    33. file_path = os.path.join(path_compress, file_each)
    34. zip_file.write(file_path, file_each)
    35. zip_file.close()
    36. else:
    37. print(path_each, "不是文件夹,不进行压缩")
    38. continue
    39. def Decompress_path_zip(path_all):
    40. path_all_list = os.listdir(path_all)
    41. for path_each in path_all_list:
    42. # 遍历所有需要压缩的文件夹
    43. if path_each.endswith('.zip'):
    44. print("正在解压:%s" % path_each)
    45. path_decompress = os.path.join(path_all, path_each)
    46. zip_file = zipfile.ZipFile(path_decompress, 'r') # 压缩文件位置
    47. for file in zip_file.namelist():
    48. if os.path.exists(path_decompress[:-4]):
    49. print("'%s'" % path_decompress[:-4], "已存在,新文件名为'%s'" % (path_decompress[:-4] + "1"))
    50. zip_file.extract(file, path_decompress[:-4] + "1") # 解压位置,pwd="1234".encode('utf-8')
    51. else:
    52. zip_file.extract(file, path_decompress[:-4]) # 解压位置
    53. zip_file.close()
    54. else:
    55. print(path_each, "非zip文件,不进行解压!")
    56. continue
    57. if __name__ == "__main__":
    58. path = "G:/try/"
    59. # Compress_path_zip(path)
    60. Decompress_path_zip(path)

            本来是想将压缩加密文件和解压加密文件写出来的,结果zipfile库好像不支持加密文件,所以就没写。虽然解压加密文件可以,但是很呆,因为只有使用传统加密的zip文件,才可以使用密码解压,不是传统加密的就算密码正确他也不解压,所以就都不写啦。大家如果想用的话,直接修改路径就行。

             本文章主要是分享个人在学习Python过程中写过的一些代码。有些部分参考了前人以及官网的教程,如有侵权请联系作者删除,大家有问题可以随时留言交流,博主会及时回复。

  • 相关阅读:
    logback知识点
    Apache IoTDB 分布式架构三部曲(二)分片与负载均衡
    Redis 常见问题
    C语言之结构体(Struct)
    C#编程流程控制与集合类型
    Day667.开发避免踩坑注意点 -Java业务开发常见错误
    彻底弄懂C/C++指针数组与数组指针
    力扣2379.得到k个黑块的最少涂色次数
    Vue3 常用组件
    抑制剂以及抗体偶联物在免疫检查点中的作用
  • 原文地址:https://blog.csdn.net/m0_56729804/article/details/132685299