本文目录导读:

我来教你几种图片批量分类的方法,从简单到复杂:
按文件格式分类(最简单)
import os
import shutil
from pathlib import Path
def classify_by_format(source_folder):
"""按图片格式分类"""
# 创建分类文件夹
formats = {
'.jpg': 'JPEG',
'.jpeg': 'JPEG',
'.png': 'PNG',
'.gif': 'GIF',
'.bmp': 'BMP',
'.webp': 'WebP'
}
# 遍历源文件夹
for filename in os.listdir(source_folder):
file_path = os.path.join(source_folder, filename)
if not os.path.isfile(file_path):
continue
# 获取文件扩展名
ext = Path(filename).suffix.lower()
# 如果有对应的分类,移动文件
if ext in formats:
dest_folder = os.path.join(source_folder, formats[ext])
os.makedirs(dest_folder, exist_ok=True)
shutil.move(file_path, os.path.join(dest_folder, filename))
print(f"移动: {filename} -> {formats[ext]}")
# 使用
classify_by_format("你的图片文件夹路径")
按文件大小分类
import os
import shutil
def classify_by_size(source_folder):
"""按图片大小分类"""
categories = {
'小图片_<100KB': 100 * 1024, # <100KB
'中图片_100KB-1MB': 1024 * 1024, # 100KB-1MB
'大图片_>1MB': float('inf') # >1MB
}
for filename in os.listdir(source_folder):
file_path = os.path.join(source_folder, filename)
if not os.path.isfile(file_path):
continue
# 获取文件大小
size = os.path.getsize(file_path)
# 按大小分类
for category, size_limit in categories.items():
if size < size_limit:
dest_folder = os.path.join(source_folder, category)
os.makedirs(dest_folder, exist_ok=True)
shutil.move(file_path, os.path.join(dest_folder, filename))
print(f"移动: {filename} -> {category}")
break
# 使用
classify_by_size("你的图片文件夹路径")
按图片尺寸(分辨率)分类
from PIL import Image
import os
import shutil
def classify_by_resolution(source_folder):
"""按图片尺寸分类"""
categories = {
'小尺寸_<800x600': (800, 600),
'中等尺寸_800x600-1920x1080': (1920, 1080),
'大尺寸_>1920x1080': (float('inf'), float('inf'))
}
for filename in os.listdir(source_folder):
file_path = os.path.join(source_folder, filename)
if not os.path.isfile(file_path):
continue
try:
# 打开图片获取尺寸
with Image.open(file_path) as img:
width, height = img.size
except:
print(f"无法处理: {filename}")
continue
# 按尺寸分类
for category, (max_w, max_h) in categories.items():
if width < max_w and height < max_h:
dest_folder = os.path.join(source_folder, category)
os.makedirs(dest_folder, exist_ok=True)
shutil.move(file_path, os.path.join(dest_folder, filename))
print(f"移动: {filename} -> {category}")
break
# 需要安装PIL库
# pip install Pillow
classify_by_resolution("你的图片文件夹路径")
按拍摄日期分类(适合照片)
import os
import shutil
from PIL import Image
from datetime import datetime
def classify_by_date(source_folder):
"""按拍摄日期分类"""
for filename in os.listdir(source_folder):
file_path = os.path.join(source_folder, filename)
if not os.path.isfile(file_path):
continue
try:
# 获取图片的EXIF信息(拍摄日期)
with Image.open(file_path) as img:
exif = img._getexif()
if exif and 36867 in exif: # 拍摄日期标签
date_str = exif[36867]
date_obj = datetime.strptime(date_str, '%Y:%m:%d %H:%M:%S')
else:
# 使用文件修改日期
file_time = os.path.getmtime(file_path)
date_obj = datetime.fromtimestamp(file_time)
except:
# 使用文件修改日期
file_time = os.path.getmtime(file_path)
date_obj = datetime.fromtimestamp(file_time)
# 按年月分类
year = str(date_obj.year)
month = f"{date_obj.month:02d}月"
dest_folder = os.path.join(source_folder, year, month)
os.makedirs(dest_folder, exist_ok=True)
shutil.move(file_path, os.path.join(dest_folder, filename))
print(f"移动: {filename} -> {year}/{month}")
# 使用
classify_by_date("你的图片文件夹路径")
完整版(带GUI界面)
import tkinter as tk
from tkinter import filedialog, messagebox
import os
import shutil
from PIL import Image
from tkinter import ttk
class ImageClassifier:
def __init__(self, root):
self.root = root
self.root.title("图片批量分类工具")
self.root.geometry("500x400")
# 创建界面
self.setup_ui()
def setup_ui(self):
# 文件夹选择
tk.Label(self.root, text="选择图片文件夹:").pack(pady=10)
self.folder_path = tk.StringVar()
tk.Entry(self.root, textvariable=self.folder_path, width=50).pack()
tk.Button(self.root, text="浏览", command=self.browse_folder).pack(pady=5)
# 分类方式选择
tk.Label(self.root, text="选择分类方式:").pack(pady=10)
self.classify_method = tk.StringVar(value="format")
methods = [
("按格式分类", "format"),
("按大小分类", "size"),
("按分辨率分类", "resolution"),
("按日期分类", "date"),
("按颜色分类", "color")
]
for text, value in methods:
tk.Radiobutton(self.root, text=text, variable=self.classify_method,
value=value).pack()
# 开始按钮
tk.Button(self.root, text="开始分类", command=self.start_classify,
bg="green", fg="white", padx=20, pady=10).pack(pady=20)
# 状态显示
self.status_text = tk.Text(self.root, height=8, width=60)
self.status_text.pack(pady=10)
def browse_folder(self):
folder = filedialog.askdirectory()
if folder:
self.folder_path.set(folder)
def log(self, message):
self.status_text.insert(tk.END, message + "\n")
self.status_text.see(tk.END)
self.root.update()
def start_classify(self):
folder = self.folder_path.get()
if not folder:
messagebox.showerror("错误", "请选择文件夹")
return
method = self.classify_method.get()
self.status_text.delete(1.0, tk.END)
try:
if method == "format":
self.classify_by_format(folder)
elif method == "size":
self.classify_by_size(folder)
elif method == "resolution":
self.classify_by_resolution(folder)
elif method == "date":
self.classify_by_date(folder)
elif method == "color":
self.classify_by_color(folder)
messagebox.showinfo("完成", "图片分类完成!")
except Exception as e:
messagebox.showerror("错误", f"分类出错: {str(e)}")
def classify_by_format(self, folder):
formats = {
'.jpg': 'JPEG',
'.jpeg': 'JPEG',
'.png': 'PNG',
'.gif': 'GIF',
'.bmp': 'BMP',
'.webp': 'WebP'
}
for filename in os.listdir(folder):
file_path = os.path.join(folder, filename)
if not os.path.isfile(file_path):
continue
ext = os.path.splitext(filename)[1].lower()
if ext in formats:
dest = os.path.join(folder, formats[ext])
os.makedirs(dest, exist_ok=True)
shutil.move(file_path, os.path.join(dest, filename))
self.log(f"移动: {filename} -> {formats[ext]}")
def classify_by_size(self, folder):
# 完整功能实现...
pass # 可以添加其他分类方法的实现
# 运行程序
if __name__ == "__main__":
root = tk.Tk()
app = ImageClassifier(root)
root.mainloop()
使用说明
-
安装依赖(如果需要):
pip install Pillow
-
选择适合的方法:
- 简单分类:方法一(按格式)
- 按文件属性:方法二、三
- 按时间信息:方法四
- 全部功能:方法五(带界面)
-
注意事项:
- 建议先备份原始图片
- 可以先测试小部分文件
- 确保有足够的磁盘空间
选择适合你需求的脚本,修改文件夹路径即可使用!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播