前言:
此刻你们对“python 文件压缩”大概比较注重,同学们都需要知道一些“python 文件压缩”的相关内容。那么小编也在网摘上网罗了一些有关“python 文件压缩””的相关内容,希望姐妹们能喜欢,兄弟们快快来了解一下吧!要对zip文件进行操作,可以使用Python标准库中的zipfile模块。zipfile模块提供了丰富的方法和类用于读取、创建和操作zip文件。下面是一个对zip文件进行封装所有操作的示例,以及对每行代码的解释
import osimport zipfileclass ZipFileManager: def __init__(self,file_path): self.file_path = file_path #要压缩zip的文件夹路径 self.unzip_file_path = unzip_file_path #解压缩zip的路径 self.zip_path = zip_path def create_zip_from_folder(self,zip_file_path): """ 压缩文件夹为zip :param zip_file_path: 创建的zip文件路径 :return: """ with zipfile.ZipFile(zip_file_path + '.zip' ,'w',zipfile.ZIP_DEFLATED) as zip_ref: for root,_,files in os.walk(self.file_path): for file in files: path = os.path.join(root,file) arc_name = os.path.relpath(path,self.file_path) zip_ref.write(path,arc_name) def create_zip_from_folder_with_special_files(self,zip_file_path,file_names=None,file_extensions=None): """ :param zip_file_path: 要压缩的文件夹路径 :param file_names: 要压缩的特定文件名列表 如[1.txt ,2.txt] 是特定的选择的文件 :param file_extensions: 要压缩的特定文件扩展名列表 ['.txt' , '.csv'] 所有类型的后缀的文件 :return: """ with zipfile.ZipFile(zip_file_path + '.zip' ,'w',zipfile.ZIP_DEFLATED) as zip_ref: for root, _, files in os.walk(self.file_path): for file in files: path = os.path.join(root, file) file_name = os.path.basename(file) if file_names and file_name not in file_names: continue if file_extensions and not any(file.endswith(ext) for ext in file_extensions): continue arc_name = os.path.relpath(path, self.file_path) zip_ref.write(path, arc_name) def extract_zip_all(self,extract_path): """ 将zip文件中的所有文件解压缩到指定的路径 :param extract_path: 解压缩的路径 :return: """ with zipfile.ZipFile(self.unzip_file_path,'r') as zip_ref: zip_ref.extractall(extract_path) def extract_special_files_from_zip(self,extract_path,file_names=None,file_extensions=None): """ 解压缩指定的文件到指定文件夹中 :param extract_path: 解压后的文件夹 :param file_names: 要解压缩的特定文件名列表 如[1.txt ,2.txt] 是特定的选择的文件 :param file_extensions: 要解压缩的特定文件扩展名列表 ['.txt' , '.csv'] 所有类型的后缀的文件 :return: """ with zipfile.ZipFile(self.unzip_file_path, 'r') as zip_ref: for file_info in zip_ref.infolist(): if (file_names and file_info.filename not in file_names) or (file_extensions and not any(file_info.filename.endswith(ext) for ext in file_extensions)): continue zip_ref.extract(file_info,extract_path) def add_files_to_exist_zip(self,files_to_add,destination_folder=None): """ :param files_to_add: 要添加的特定文件列表 :param destination_folder 可选参数,表示可以添加到文件夹路径 :return: """ with zipfile.ZipFile(self.zip_path, 'a',zipfile.ZIP_DEFLATED) as zip_ref: for filepath in files_to_add: if destination_folder and os.path.isdir(destination_folder): acrname = os.path.join(destination_folder,os.path.basename(filepath)) else: acrname = os.path.basename(filepath) zip_ref.write(filepath,acrname) def remove_files_from_zip(self, files_to_remove): """ 将指定的文件从zip文件中删除 :param file_to_remove: 要删除的特定文件列表 [1.txt,2.txt] :return: """ files_to_remove = set(files_to_remove) #将要删除的文件名构建成集合形式 temp_zip_file_path = self.zip_path + '.temp' #创建一个临时文件夹保存不不需要删除的文件 with zipfile.ZipFile(self.file_path, 'r') as zip_ref,zipfile.ZipFile(temp_zip_file_path,'w') as temp_zip_ref: for file_info in zip_ref.infolist(): #遍历原始.zip文件中所有文件 if file_info.filename not in files_to_remove: file_data = zip_ref.read(file_info.filename) temp_zip_ref.writestr(file_info,file_data) os.replace(temp_zip_file_path,self.zip_path) #替换原始的.zip文件if __name__ == '__main__': pass file_path = '' # 要压缩zip的文件夹路径 unzip_file_path = '' # 解压缩zip的路径 zip_path = '' #.zip所有路径
解释每行代码的意思:
导入zipfile模块,用于进行zip文件相关操作。导入os模块,用于处理文件路径和文件夹操作。create_zip_from_folder函数,将文件压缩为.zipcreate_zip_from_folder_with_special_files函数, 解压缩指定的文件到指定文件夹中extract_zip_all函数,将zip文件中的所有文件解压缩到指定的路径extract_special_files_from_zip函数,解压缩指定的文件到指定文件夹中add_files_to_exist_zip函数 ,添加的特定文件列表到zip中remove_files_from_zip函数, 删除文件