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
成功啦:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)