206 lines
6.6 KiB
Python
206 lines
6.6 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
"""
|
|||
|
|
检查换装图片文件
|
|||
|
|
"""
|
|||
|
|
from pathlib import Path
|
|||
|
|
import hashlib
|
|||
|
|
|
|||
|
|
# 图片源目录
|
|||
|
|
SOURCE_DIR = Path('开发/2026年2月4日/Image')
|
|||
|
|
|
|||
|
|
# 期望的文件列表
|
|||
|
|
EXPECTED_FILES = {
|
|||
|
|
# 上装 - 女性
|
|||
|
|
"女性上衣白色T桖.png": "白色T恤",
|
|||
|
|
"女性-上装-粉丝短袖.png": "粉色短袖",
|
|||
|
|
"女性-上装-蓝色衬衫.png": "蓝色衬衫",
|
|||
|
|
"女性-上装-灰色卫衣.png": "灰色卫衣",
|
|||
|
|
"女性-上装-收费-蕾丝吊带上衣.png": "蕾丝吊带上衣",
|
|||
|
|
"女性-上装-收费-一字领露肩上衣.png": "一字领露肩上衣",
|
|||
|
|
"女性-上装-收费-露脐短袖.png": "露脐短袖",
|
|||
|
|
"女性-上装-收费-针织开衫.png": "针织开衫",
|
|||
|
|
"女性-上装-收费-小香风外套.png": "小香风外套",
|
|||
|
|
"女性-上装-vlp专属-真丝衬衫.png": "真丝衬衫",
|
|||
|
|
|
|||
|
|
# 下装 - 女性
|
|||
|
|
"女性-下衣-蓝色牛仔裤.png": "蓝色牛仔裤",
|
|||
|
|
"女性-下衣-黑色短裙.png": "黑色短裙",
|
|||
|
|
"女性-下衣-白色短裙.png": "白色短裤",
|
|||
|
|
"女性-下衣-灰色运动裤.png": "灰色运动裤",
|
|||
|
|
"女性-下衣-A字半身裙.png": "A字半身裙",
|
|||
|
|
"女性-下衣-高腰阔腿裤.png": "高腰阔腿裤",
|
|||
|
|
"女性-下衣-收费-百褶短裙.png": "百褶短裙",
|
|||
|
|
"女性-下衣-收费-破洞牛仔裤.png": "破洞牛仔裤",
|
|||
|
|
"女性-下衣-收费-西装裤.png": "西装裤",
|
|||
|
|
|
|||
|
|
# 连衣裙 - 女性
|
|||
|
|
"女性-连衣裙-白色连衣裙.png": "白色连衣裙",
|
|||
|
|
"女性-连衣裙-碎花连衣裙.png": "碎花连衣裙",
|
|||
|
|
"女性-连衣裙-黑色小礼服.png": "黑色小礼服",
|
|||
|
|
"女性-连衣裙-优雅长裙.png": "优雅长裙",
|
|||
|
|
"女性-连衣裙-吊带连衣裙.png": "吊带连衣裙",
|
|||
|
|
"女性-连衣裙-JK制服.png": "JK制服",
|
|||
|
|
"女性-连衣裙-汉服.png": "汉服",
|
|||
|
|
"女性-连衣裙-洛丽塔.png": "洛丽塔",
|
|||
|
|
"女性-连衣裙-圣诞服装.png": "圣诞装",
|
|||
|
|
"女性-连衣裙-高级定制婚纱.png": "高级定制婚纱",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_file_hash(file_path):
|
|||
|
|
"""计算文件 MD5 哈希值"""
|
|||
|
|
md5 = hashlib.md5()
|
|||
|
|
with open(file_path, 'rb') as f:
|
|||
|
|
for chunk in iter(lambda: f.read(4096), b""):
|
|||
|
|
md5.update(chunk)
|
|||
|
|
return md5.hexdigest()
|
|||
|
|
|
|||
|
|
|
|||
|
|
def check_images():
|
|||
|
|
"""检查图片文件"""
|
|||
|
|
print("=" * 70)
|
|||
|
|
print(" 换装图片文件检查")
|
|||
|
|
print("=" * 70)
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
if not SOURCE_DIR.exists():
|
|||
|
|
print(f"❌ 错误:源目录不存在: {SOURCE_DIR}")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
# 获取所有 PNG 文件
|
|||
|
|
all_files = list(SOURCE_DIR.glob("*.png"))
|
|||
|
|
print(f"📁 源目录: {SOURCE_DIR}")
|
|||
|
|
print(f"📊 找到 {len(all_files)} 个 PNG 文件")
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# 检查期望的文件
|
|||
|
|
print("=" * 70)
|
|||
|
|
print(" 检查期望的文件")
|
|||
|
|
print("=" * 70)
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
missing_files = []
|
|||
|
|
existing_files = []
|
|||
|
|
file_sizes = {}
|
|||
|
|
|
|||
|
|
for filename, description in EXPECTED_FILES.items():
|
|||
|
|
file_path = SOURCE_DIR / filename
|
|||
|
|
if file_path.exists():
|
|||
|
|
size = file_path.stat().st_size
|
|||
|
|
size_kb = size / 1024
|
|||
|
|
file_sizes[filename] = size
|
|||
|
|
existing_files.append(filename)
|
|||
|
|
|
|||
|
|
if size < 10000: # 小于 10KB 可能是空白或损坏
|
|||
|
|
print(f"⚠️ {description}")
|
|||
|
|
print(f" 文件: {filename}")
|
|||
|
|
print(f" 大小: {size_kb:.1f} KB (可能是空白图片)")
|
|||
|
|
print()
|
|||
|
|
else:
|
|||
|
|
print(f"✓ {description}")
|
|||
|
|
print(f" 文件: {filename}")
|
|||
|
|
print(f" 大小: {size_kb:.1f} KB")
|
|||
|
|
print()
|
|||
|
|
else:
|
|||
|
|
missing_files.append((filename, description))
|
|||
|
|
print(f"✗ {description}")
|
|||
|
|
print(f" 文件: {filename}")
|
|||
|
|
print(f" 状态: 缺失")
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# 检查重复的图片(相同内容)
|
|||
|
|
print("=" * 70)
|
|||
|
|
print(" 检查重复的图片")
|
|||
|
|
print("=" * 70)
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
hash_map = {}
|
|||
|
|
duplicates = []
|
|||
|
|
|
|||
|
|
for filename in existing_files:
|
|||
|
|
file_path = SOURCE_DIR / filename
|
|||
|
|
file_hash = get_file_hash(file_path)
|
|||
|
|
|
|||
|
|
if file_hash in hash_map:
|
|||
|
|
duplicates.append((filename, hash_map[file_hash]))
|
|||
|
|
print(f"⚠️ 发现重复图片:")
|
|||
|
|
print(f" 文件1: {hash_map[file_hash]}")
|
|||
|
|
print(f" 文件2: {filename}")
|
|||
|
|
print(f" 哈希: {file_hash}")
|
|||
|
|
print()
|
|||
|
|
else:
|
|||
|
|
hash_map[file_hash] = filename
|
|||
|
|
|
|||
|
|
if not duplicates:
|
|||
|
|
print("✓ 没有发现重复的图片")
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# 检查额外的文件
|
|||
|
|
print("=" * 70)
|
|||
|
|
print(" 检查额外的文件")
|
|||
|
|
print("=" * 70)
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
expected_filenames = set(EXPECTED_FILES.keys())
|
|||
|
|
actual_filenames = set(f.name for f in all_files)
|
|||
|
|
extra_files = actual_filenames - expected_filenames
|
|||
|
|
|
|||
|
|
if extra_files:
|
|||
|
|
for filename in extra_files:
|
|||
|
|
file_path = SOURCE_DIR / filename
|
|||
|
|
size = file_path.stat().st_size
|
|||
|
|
size_kb = size / 1024
|
|||
|
|
print(f"⚠️ 额外的文件: {filename}")
|
|||
|
|
print(f" 大小: {size_kb:.1f} KB")
|
|||
|
|
print()
|
|||
|
|
else:
|
|||
|
|
print("✓ 没有额外的文件")
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# 统计结果
|
|||
|
|
print("=" * 70)
|
|||
|
|
print(" 统计结果")
|
|||
|
|
print("=" * 70)
|
|||
|
|
print()
|
|||
|
|
print(f"期望文件数: {len(EXPECTED_FILES)}")
|
|||
|
|
print(f"存在文件数: {len(existing_files)}")
|
|||
|
|
print(f"缺失文件数: {len(missing_files)}")
|
|||
|
|
print(f"重复图片数: {len(duplicates)}")
|
|||
|
|
print(f"额外文件数: {len(extra_files)}")
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# 建议
|
|||
|
|
print("=" * 70)
|
|||
|
|
print(" 建议")
|
|||
|
|
print("=" * 70)
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
if missing_files:
|
|||
|
|
print("⚠️ 缺失的文件需要补充:")
|
|||
|
|
for filename, description in missing_files:
|
|||
|
|
print(f" - {description} ({filename})")
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
if duplicates:
|
|||
|
|
print("⚠️ 重复的图片需要替换为不同的图片:")
|
|||
|
|
for file1, file2 in duplicates:
|
|||
|
|
print(f" - {file1} 和 {file2} 内容相同")
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# 检查小文件(可能是空白)
|
|||
|
|
small_files = [(f, s) for f, s in file_sizes.items() if s < 10000]
|
|||
|
|
if small_files:
|
|||
|
|
print("⚠️ 以下文件可能是空白或损坏(小于 10KB):")
|
|||
|
|
for filename, size in small_files:
|
|||
|
|
print(f" - {filename} ({size / 1024:.1f} KB)")
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
if not missing_files and not duplicates and not small_files:
|
|||
|
|
print("✓ 所有图片文件正常!")
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
check_images()
|