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 @   Lovi*  阅读(229)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示