python实现文件批量压缩
python实现文件夹下文件的批量压缩
初级版本
压缩之前
压缩之后:
源代码
- 使用的时候只需要把“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)
效果:
这里发现压缩包只有两个,是因为呢哪两个文件名字一样,给覆盖了。
优化版本
遇到同名的时候,在后边增加序号。
并且为了更灵活代码可以复用。
所以,优化了一下。
效果为:
源代码为:
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
成功啦: