龙空技术网

Python进行文件ZIP压缩与解压缩

云中随心而记 290

前言:

此刻你们对“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函数, 删除文件

标签: #python 文件压缩 #python解压文件夹 #python解压zip文件到指定目录