好长一段时间没有更新了,最近手里的项目没停过太忙了。今天正好有空就分享下之前编写的一段代码。
起因是因为我想将一些文件上传至网盘,但奈何太穷开不起会员,无法上传超过4G的文件。于是就想能不能使用Python实现批量压缩文件夹,搞都搞了顺便将解压文件夹也写出来了。今天就和大家分享一下。
os库是为了监测生成的文件夹是否已存在。主要的库是zipfile,它提供了有关windows下的文件/文件夹的压缩、解压的函数。
- import os
- import zipfile
今天偷个懒,就不一段一段的去解释了,直接整个函数展示。相关的注释已经写清楚了,主要函数就是zipfile.ZipFile和zip_file.write。zip_file.write(file_path,file_each)中,file_path是文件夹中文件的完整路径,file_each是文件名。
- def Compress_path_zip(path_all):
- path_all_list = os.listdir(path_all)
- # 列出总文件夹内所有需要压缩的文件夹
- for path_each in path_all_list:
- path_compress = os.path.join(path_all, path_each)
- # 待压缩的绝对路径
- if os.path.isdir(path_compress):
- print("正在压缩:%s" % path_each)
- # 遍历所有需要压缩的文件夹
- if os.path.exists(path_all + "%s.zip" % path_each):
- print(path_all + "%s1.zip" % path_each+"已存在,新文件名为'%s'" % (path_all + "%s1.zip" % path_each))
- zip_file = zipfile.ZipFile(path_all + "%s1.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
- # 创建的压缩对象用于执行后续操作
- # file_list = zip_file.namelist()
- # 列出压缩文件夹中所有文件
- else:
- zip_file = zipfile.ZipFile(path_all + "%s.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
- file_list = os.listdir(path_compress)
- # 待压缩文件夹内所有文件
- # zip_file.setpassword(b'123')
- for file_each in file_list:
- # 遍历所有文件夹内的文件
- file_path = os.path.join(path_compress, file_each)
- zip_file.write(file_path, file_each)
- zip_file.close()
- else:
- print(path_each, "不是文件夹,不进行压缩")
- continue
这段代码就不细说了,反正修改了路径就能直接使用了。
- def Decompress_path_zip(path_all):
- path_all_list = os.listdir(path_all)
- for path_each in path_all_list:
- # 遍历所有需要压缩的文件夹
- if path_each.endswith('.zip'):
- print("正在解压:%s" % path_each)
- path_decompress = os.path.join(path_all, path_each)
- zip_file = zipfile.ZipFile(path_decompress, 'r') # 压缩文件位置
- for file in zip_file.namelist():
- if os.path.exists(path_decompress[:-4]):
- print("'%s'" % path_decompress[:-4], "已存在,新文件名为'%s'" % (path_decompress[:-4] + "1"))
- zip_file.extract(file, path_decompress[:-4] + "1") # 解压位置,pwd="1234".encode('utf-8')
- else:
- zip_file.extract(file, path_decompress[:-4]) # 解压位置
- zip_file.close()
- else:
- print(path_each, "非zip文件,不进行解压!")
- continue
- # -*- coding: utf-8 -*-
- """
- @Time : 2023/8/28 14:47
- @Auth : RS迷途小书童
- @File :Compress and Decompress Folders.py
- @IDE :PyCharm
- @Purpose:批量压缩/解压文件夹
- """
- import os
- import zipfile
-
-
- def Compress_path_zip(path_all):
- path_all_list = os.listdir(path_all)
- # 列出总文件夹内所有需要压缩的文件夹
- for path_each in path_all_list:
- path_compress = os.path.join(path_all, path_each)
- # 待压缩的绝对路径
- if os.path.isdir(path_compress):
- print("正在压缩:%s" % path_each)
- # 遍历所有需要压缩的文件夹
- if os.path.exists(path_all + "%s.zip" % path_each):
- print(path_all + "%s1.zip" % path_each+"已存在,新文件名为'%s'" % (path_all + "%s1.zip" % path_each))
- zip_file = zipfile.ZipFile(path_all + "%s1.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
- # 创建的压缩对象用于执行后续操作
- # file_list = zip_file.namelist()
- # 列出压缩文件夹中所有文件
- else:
- zip_file = zipfile.ZipFile(path_all + "%s.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
- file_list = os.listdir(path_compress)
- # 待压缩文件夹内所有文件
- # zip_file.setpassword(b'123')
- for file_each in file_list:
- # 遍历所有文件夹内的文件
- file_path = os.path.join(path_compress, file_each)
- zip_file.write(file_path, file_each)
- zip_file.close()
- else:
- print(path_each, "不是文件夹,不进行压缩")
- continue
-
-
- def Decompress_path_zip(path_all):
- path_all_list = os.listdir(path_all)
- for path_each in path_all_list:
- # 遍历所有需要压缩的文件夹
- if path_each.endswith('.zip'):
- print("正在解压:%s" % path_each)
- path_decompress = os.path.join(path_all, path_each)
- zip_file = zipfile.ZipFile(path_decompress, 'r') # 压缩文件位置
- for file in zip_file.namelist():
- if os.path.exists(path_decompress[:-4]):
- print("'%s'" % path_decompress[:-4], "已存在,新文件名为'%s'" % (path_decompress[:-4] + "1"))
- zip_file.extract(file, path_decompress[:-4] + "1") # 解压位置,pwd="1234".encode('utf-8')
- else:
- zip_file.extract(file, path_decompress[:-4]) # 解压位置
- zip_file.close()
- else:
- print(path_each, "非zip文件,不进行解压!")
- continue
-
-
- if __name__ == "__main__":
- path = "G:/try/"
- # Compress_path_zip(path)
- Decompress_path_zip(path)
本来是想将压缩加密文件和解压加密文件写出来的,结果zipfile库好像不支持加密文件,所以就没写。虽然解压加密文件可以,但是很呆,因为只有使用传统加密的zip文件,才可以使用密码解压,不是传统加密的就算密码正确他也不解压,所以就都不写啦。大家如果想用的话,直接修改路径就行。
本文章主要是分享个人在学习Python过程中写过的一些代码。有些部分参考了前人以及官网的教程,如有侵权请联系作者删除,大家有问题可以随时留言交流,博主会及时回复。