用Python实现一次可以解压多个压缩包

概述

在开发过程中,经常会遇到需要解压多个压缩包的情况。本文将介绍如何使用Python实现一次解压多个压缩包的功能。

流程图

stateDiagram
   [*] --> 开始
    开始 --> 检查目录
    检查目录 --> 解压压缩包
    解压压缩包 --> 检查是否完成
    检查是否完成 --> 完成
    完成 --> 结束

详细步骤

步骤 描述
1 检查目录中是否存在压缩包
2 如果存在压缩包,则解压该压缩包
3 检查是否完成解压操作
4 如果完成解压操作,则结束;否则继续解压下一个压缩包

下面是每一步需要做的事情以及对应的代码和注释:

步骤1:检查目录中是否存在压缩包

import os

def check_zip_files(directory):
    zip_files = []
    for file in os.listdir(directory):
        if file.endswith('.zip'):
            zip_files.append(file)
    return zip_files

# 调用函数检查当前目录中是否存在压缩包
zip_files = check_zip_files('.')
print('存在的压缩包:', zip_files)

代码解释:

  • 使用os.listdir(directory)获取目录中的文件列表
  • 使用file.endswith('.zip')判断文件是否以.zip结尾,如果是,则将该文件加入到压缩包列表中

步骤2:解压压缩包

import zipfile

def extract_zip_files(zip_files, destination):
    for file in zip_files:
        with zipfile.ZipFile(file, 'r') as zip_ref:
            zip_ref.extractall(destination)

# 调用函数解压压缩包到指定目录
extract_zip_files(zip_files, 'destination_folder')

代码解释:

  • 使用zipfile.ZipFile(file, 'r')打开压缩包文件
  • 使用zip_ref.extractall(destination)将压缩包文件中的所有内容解压到指定目录

步骤3:检查是否完成解压操作

def check_extraction(zip_files, destination):
    for file in zip_files:
        extracted_folder = os.path.join(destination, os.path.splitext(file)[0])
        if not os.path.exists(extracted_folder):
            return False
    return True

# 调用函数检查解压操作是否完成
extraction_completed = check_extraction(zip_files, 'destination_folder')
print('解压操作是否完成:', extraction_completed)

代码解释:

  • 使用os.path.join(destination, os.path.splitext(file)[0])生成压缩包解压后的文件夹路径
  • 使用os.path.exists(extracted_folder)检查解压后的文件夹是否存在,如果不存在,则说明解压操作尚未完成

步骤4:结束或继续解压下一个压缩包

if extraction_completed:
    print('解压操作已完成')
else:
    print('解压操作尚未完成')

代码解释:

  • 根据解压操作是否完成的结果,输出相应的信息

完整代码

import os
import zipfile

def check_zip_files(directory):
    zip_files = []
    for file in os.listdir(directory):
        if file.endswith('.zip'):
            zip_files.append(file)
    return zip_files

def extract_zip_files(zip_files, destination):
    for file in zip_files:
        with zipfile.ZipFile(file, 'r') as zip_ref:
            zip_ref.extractall(destination)

def check_extraction(zip_files, destination):
    for file in zip_files:
        extracted_folder = os.path.join(destination, os.path.splitext(file)[0])
        if not os.path.exists(extracted_folder):
            return False
    return True

zip_files = check_zip_files('.')
print('存在的压缩包:', zip_files)

extract_zip_files(zip_files, 'destination_folder')

extraction_completed = check_extraction(zip_files, 'destination_folder')
print('解压操作是否完成:', extraction_completed)

if extraction_completed:
    print('解压操作已完成')
else:
    print('解压操作尚未完成')