python 解压指定目录的所有zip文件

复制代码
# -*- coding: utf-8 -*-
import sys
import time
import zipfile
import os
from datetime import datetime
from colorama import Fore, Style


def fake_progress_bar():
    total_progress = 50
    for i in range(total_progress + 1):
        time.sleep(0.01)  # 模拟解压文件所需的时间
        sys.stdout.write('\r[' + '#' * i + '-' * (total_progress - i) + ']')
        sys.stdout.flush()


def unzip_dir(directory):
    # 获取当前时间
    try:
        current_time = datetime.now()

        # 将时间格式化为字符串
        time_str = current_time.strftime("%Y%m%d%H%M%S")
        # 指定包含ZIP文件的目录
        # directory = 'data'

        # 遍历指定目录中的文件
        for filename in os.listdir(directory):
            if filename.endswith('.zip'):

                file_path = os.path.join(directory, filename)
                with zipfile.ZipFile(file_path, 'r') as zip_ref:
                    # 指定解压缩目标目录
                    extraction_path = os.path.join(directory, directory + "-" + time_str, filename)
                    os.makedirs(extraction_path.replace(".zip", ""), exist_ok=True)

                    # 使用tqdm进行进度显示

                    for info in zip_ref.infolist():
                        # 解决文件名编码问题
                        file_name = info.filename.encode('cp437').decode('gbk')
                        with zip_ref.open(info) as source, open(
                                os.path.join(extraction_path.replace(".zip", ""), file_name), 'wb') as target:
                            target.write(source.read())

                        # 调用模拟进度函数
                        fake_progress_bar()
                        print(f'解压 {filename} 到 {extraction_path.strip(".zip")}')
    except Exception as e:
        print(e)


if __name__ == '__main__':
    while True:
        source_directory = input(
            Fore.LIGHTGREEN_EX + "===== 请输入文件名称或输入 'q' 退出 =====\n:" + Style.RESET_ALL)  # 使用黄色文本
        if source_directory.lower() == 'q':
            print("已退出!")
            break
        if not os.path.exists(source_directory):
            print(Fore.RED + "源目录或目标目录不存在!!!\n" + Style.RESET_ALL)  # 使用红色文本
        else:
            print("开始解压:{}".format(source_directory))
            unzip_dir(source_directory)
            print("解压完毕!!!")

==========================================================

修改了一下!!!递归所有文件夹里面的zip

复制代码
# -*- coding: utf-8 -*-
import sys
import time
import zipfile
import os
from datetime import datetime
from colorama import Fore, Style


def fake_progress_bar():
    total_progress = 50
    for i in range(total_progress + 1):
        time.sleep(0.01)  # 模拟解压文件所需的时间
        sys.stdout.write('\r[' + '#' * i + '-' * (total_progress - i) + ']')
        sys.stdout.flush()


def unzip_dir(directory):
    try:
        # 获取当前时间
        current_time = datetime.now()

        # 将时间格式化为字符串
        time_str = current_time.strftime("%Y%m%d%H%M%S")

        # 遍历指定目录及其子目录中的所有ZIP文件
        for root, _, files in os.walk(directory):
            for filename in files:
                if filename.endswith('.zip'):
                    file_path = os.path.join(root, filename)
                    with zipfile.ZipFile(file_path, 'r') as zip_ref:
                        # 指定解压缩目标目录
                        extraction_path = os.path.join(root, filename + "-" + time_str)
                        os.makedirs(extraction_path, exist_ok=True)

                        # 使用tqdm进行进度显示
                        for info in zip_ref.infolist():
                            # 解决文件名编码问题
                            file_name = info.filename.encode('cp437').decode('gbk')
                            with zip_ref.open(info) as source, open(
                                    os.path.join(extraction_path, file_name), 'wb') as target:
                                target.write(source.read())

                            # 调用模拟进度函数
                            fake_progress_bar()
                            print(f'解压 {filename} 到 {extraction_path}')
    except Exception as e:
        print(e)


if __name__ == '__main__':
    while True:
        source_directory = input(
            Fore.LIGHTGREEN_EX + "===== 请输入文件夹路径或输入 'q' 退出 =====\n:" + Style.RESET_ALL)  # 使用黄色文本
        if source_directory.lower() == 'q':
            print("已退出!")
            break
        if not os.path.exists(source_directory):
            print(Fore.RED + "源目录或目标目录不存在!!!\n" + Style.RESET_ALL)  # 使用红色文本
        else:
            print("开始解压文件夹:{}".format(source_directory))
            unzip_dir(source_directory)
            print("解压完毕!!!")

附件为,打包好的exe,可以直接执行。(https://download.csdn.net/download/li13148023/88492399)

相关推荐
安特尼36 分钟前
招行数字金融挑战赛数据赛道赛题一
人工智能·python·机器学习·金融·数据分析
serve the people42 分钟前
解决osx-arm64平台上conda默认源没有提供 python=3.7 的官方编译版本的问题
开发语言·python·conda
多多*2 小时前
Java反射 八股版
java·开发语言·hive·python·sql·log4j·mybatis
正在走向自律2 小时前
从0到1:Python机器学习实战全攻略(8/10)
开发语言·python·机器学习
西西弗Sisyphus2 小时前
Python 处理图像并生成 JSONL 元数据文件 - 灵活text版本
开发语言·python
Taichi呀2 小时前
PyCharm 快捷键指南
ide·python·pycharm
Stara05113 小时前
基于注意力机制与iRMB模块的YOLOv11改进模型—高效轻量目标检测新范式
人工智能·python·深度学习·神经网络·目标检测·计算机视觉·yolov11
Python猫3 小时前
付费专栏·Python潮流周刊电子书合集(epub、pdf、markdown)下载
python·计算机·pdf·电子书·资料
强化学习与机器人控制仿真4 小时前
openpi 入门教程
开发语言·人工智能·python·深度学习·神经网络·机器人·自动驾驶
BuLingLings5 小时前
vue3+flask+sqlite前后端项目实战
python·sqlite·flask