python实现文件批量压缩

python实现文件夹下文件的批量压缩

初级版本

压缩之前

image-20230624173118646

压缩之后:

image-20230624174956636

源代码

  • 使用的时候只需要把“directory_path = r'D:\桌面\ceshi'” 这里的路径修改成对应的文件夹即可
import os
import zipfile


def zip_files_in_directory(directory):
    # 获取目录中的文件列表
    file_list = os.listdir(directory)

    # 遍历文件列表
    for file_name in file_list:
        # 构建文件的完整路径
        file_path = os.path.join(directory, file_name)

        # 检查文件是否为普通文件
        if os.path.isfile(file_path):
            # 构建压缩文件的路径
            zip_file_path = os.path.join(
                directory,
                os.path.splitext(file_name)[0] + '.zip')

            # 创建ZIP文件并添加文件到其中
            with zipfile.ZipFile(zip_file_path, 'w') as zip_file:
                zip_file.write(file_path, file_name)

            print(f'已压缩文件: {file_name} -> {os.path.basename(zip_file_path)}')


# 要压缩的目录路径
directory_path = r'D:\桌面\ceshi'

# 压缩文件
zip_files_in_directory(directory_path)

效果:

image-20230624173325613

image-20230624173359344

这里发现压缩包只有两个,是因为呢哪两个文件名字一样,给覆盖了。

优化版本

遇到同名的时候,在后边增加序号。

并且为了更灵活代码可以复用。

所以,优化了一下。

效果为:

image-20230624175104198

源代码为:

import os
import tkinter as tk
from tkinter import filedialog
import zipfile


def zip_files_in_directory(directory):
    # 获取目录中的文件列表
    file_list = os.listdir(directory)

    # 遍历文件列表
    for file_name in file_list:
        # 构建文件的完整路径
        file_path = os.path.join(directory, file_name)

        # 检查文件是否为普通文件
        if os.path.isfile(file_path):
            # 构建压缩文件的路径
            base_name = os.path.splitext(file_name)[0]
            zip_file_name = f'{base_name}.zip'
            zip_file_path = os.path.join(directory, zip_file_name)

            # 检查压缩文件名是否已存在,若存在,则添加序号以避免重复
            counter = 1
            while os.path.exists(zip_file_path):
                zip_file_name = f'{base_name}_{counter}.zip'
                zip_file_path = os.path.join(directory, zip_file_name)
                counter += 1

            # 创建ZIP文件并添加文件到其中
            with zipfile.ZipFile(zip_file_path, 'w') as zip_file:
                zip_file.write(file_path, file_name)

            print(f'已压缩文件: {file_name} -> {os.path.basename(zip_file_path)}')


def browse_directory():
    # 弹出文件夹选择对话框
    directory = filedialog.askdirectory(title='选择要批量压缩的文件夹')
    entry_path.delete(0, tk.END)
    entry_path.insert(0, directory)


def compress_files():
    directory = entry_path.get()
    if directory:
        zip_files_in_directory(directory)


# 创建GUI窗口
window = tk.Tk()
window.title('文件压缩工具')

# 创建提示标签
label_prompt = tk.Label(window, text='请输入要批量压缩文件的父级文件夹路径:')
label_prompt.pack(pady=10)

# 创建路径输入框
entry_path = tk.Entry(window, width=50)
entry_path.pack(pady=5)

# 创建浏览按钮
button_browse = tk.Button(window, text='浏览', command=browse_directory)
button_browse.pack(pady=5)

# 创建压缩按钮
button_compress = tk.Button(window, text='开始压缩', command=compress_files)
button_compress.pack(pady=10)

# 运行GUI窗口
window.mainloop()

后续

打包,让不会python的人也能用!

pyinstaller --onefile 批量压缩.py  

image-20230624175411900

成功啦:

image-20230624175449845

posted @ 2023-06-24 17:58  Lovi*  阅读(212)  评论(0编辑  收藏  举报