欢迎访问宙启技术站
智能推送

Python中使用zipfile()模块删除ZIP文件中的指定文件或文件夹

发布时间:2023-12-30 13:53:51

在Python中,可以使用zipfile模块来处理ZIP文件。zipfile模块提供了一种方便的方式来创建、读取和提取ZIP文件。

要删除ZIP文件中的指定文件或文件夹,我们需要执行以下步骤:

1. 导入zipfile模块

import zipfile

2. 打开ZIP文件

zip_path = 'path/to/zipfile.zip'
zip_file = zipfile.ZipFile(zip_path, 'r')

3. 获取ZIP文件中的所有文件和文件夹列表

zip_contents = zip_file.namelist()

4. 创建一个新的ZIP文件对象,用于存储需要保留的文件和文件夹

new_zip_file = zipfile.ZipFile('path/to/new_zipfile.zip', 'w')

5. 遍历ZIP文件中的所有内容,并将需要保留的文件和文件夹添加到新的ZIP文件中

for item in zip_contents:
    # 如果要删除的文件或文件夹不在需要保留的列表中,将其添加到新的ZIP文件中
    if item != 'path/to/delete_file.txt' and item != 'path/to/delete_folder/':
        # 如果当前项是文件夹,则使用new_zip_file.writestr()添加文件夹
        if item.endswith('/'):
            new_zip_file.writestr(item, '')
        # 如果当前项是文件,则使用new_zip_file.writestr()添加文件
        else:
            file_data = zip_file.read(item)
            new_zip_file.writestr(item, file_data)

6. 关闭ZIP文件对象

zip_file.close()
new_zip_file.close()

7. 重命名新的ZIP文件为原始的ZIP文件名

import os
os.rename('path/to/new_zipfile.zip', 'path/to/zipfile.zip')

下面是一个完整的例子,展示了如何使用zipfile模块删除ZIP文件中的指定文件或文件夹:

import zipfile
import os

def delete_from_zip(zip_path, files_to_delete):
    # 打开ZIP文件
    zip_file = zipfile.ZipFile(zip_path, 'r')
    
    # 获取ZIP文件中的所有文件和文件夹列表
    zip_contents = zip_file.namelist()
    
    # 创建一个新的ZIP文件对象,用于存储需要保留的文件和文件夹
    new_zip_file = zipfile.ZipFile('path/to/new_zipfile.zip', 'w')
    
    # 遍历ZIP文件中的所有内容,并将需要保留的文件和文件夹添加到新的ZIP文件中
    for item in zip_contents:
        # 如果要删除的文件或文件夹不在需要保留的列表中,将其添加到新的ZIP文件中
        if item not in files_to_delete:
            # 如果当前项是文件夹,则使用new_zip_file.writestr()添加文件夹
            if item.endswith('/'):
                new_zip_file.writestr(item, '')
            # 如果当前项是文件,则使用new_zip_file.writestr()添加文件
            else:
                file_data = zip_file.read(item)
                new_zip_file.writestr(item, file_data)
    
    # 关闭ZIP文件对象
    zip_file.close()
    new_zip_file.close()
    
    # 重命名新的ZIP文件为原始的ZIP文件名
    os.rename('path/to/new_zipfile.zip', zip_path)

# 定义要删除的文件和文件夹列表
files_to_delete = ['path/to/delete_file.txt', 'path/to/delete_folder/']

# 调用函数删除ZIP文件中的指定文件或文件夹
delete_from_zip('path/to/zipfile.zip', files_to_delete)

此例子中,我们定义了一个delete_from_zip()函数,该函数接受ZIP文件路径和要删除的文件和文件夹列表作为参数。通过调用该函数,我们可以删除ZIP文件中的指定文件或文件夹。

请确保将代码中的path/to/zipfile.zip替换为实际的ZIP文件路径,将path/to/delete_file.txtpath/to/delete_folder/替换为要删除的文件和文件夹的路径。

通过执行上述代码,我们可以删除ZIP文件中的指定文件或文件夹,并将修改后的ZIP文件保存在新的ZIP文件中。

希望这个例子能够帮助你理解如何使用zipfile模块删除ZIP文件中的指定文件或文件夹。