186 lines
6.0 KiB
Python
186 lines
6.0 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
"""
|
|||
|
|
直接处理文旅订单班的图片整理
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import os
|
|||
|
|
import shutil
|
|||
|
|
import re
|
|||
|
|
from pathlib import Path
|
|||
|
|
|
|||
|
|
def main():
|
|||
|
|
"""主函数"""
|
|||
|
|
base_dir = Path("/Users/xiaoqi/Documents/Dev/Project/2025-09-08_n8nDEMO演示/data/订单班文档资料/文旅")
|
|||
|
|
notion_dir = base_dir / "notion文稿"
|
|||
|
|
image_dir = notion_dir / "image"
|
|||
|
|
|
|||
|
|
print("=" * 60)
|
|||
|
|
print("开始处理文旅订单班图片")
|
|||
|
|
print("=" * 60)
|
|||
|
|
|
|||
|
|
# 定义图片重命名映射
|
|||
|
|
rename_mapping = {
|
|||
|
|
# Whisk系列 -> 设计图系列
|
|||
|
|
"Whisk_03282ab7e5.jpg": "设计图_01.jpg",
|
|||
|
|
"Whisk_15f65339bb.jpg": "设计图_02.jpg",
|
|||
|
|
"Whisk_192cdc54bc.jpg": "设计图_03.jpg",
|
|||
|
|
"Whisk_1c05424f7f.jpg": "设计图_04.jpg",
|
|||
|
|
"Whisk_27184afa6e.jpg": "设计图_05.jpg",
|
|||
|
|
"Whisk_2a9b622636.jpg": "设计图_06.jpg",
|
|||
|
|
"Whisk_4aabd94ef3.jpg": "设计图_07.jpg",
|
|||
|
|
"Whisk_5c4b912ea7.jpg": "设计图_08.jpg",
|
|||
|
|
"Whisk_8236005bb2.jpg": "设计图_09.jpg",
|
|||
|
|
"Whisk_9e8c1f44ac.jpg": "设计图_10.jpg",
|
|||
|
|
"Whisk_be64a7b61f.jpg": "设计图_11.jpg",
|
|||
|
|
"Whisk_c478fe089d.jpg": "设计图_12.jpg",
|
|||
|
|
"Whisk_dcc81c5212.jpg": "设计图_13.jpg",
|
|||
|
|
"Whisk_e2ffe75dbc.jpg": "设计图_14.jpg",
|
|||
|
|
"Whisk_e2ffe75dbc 1.jpg": "设计图_15.jpg",
|
|||
|
|
"Whisk_e8f83d1a37.jpg": "设计图_16.jpg",
|
|||
|
|
"Whisk_f3f954649c.jpg": "设计图_17.jpg",
|
|||
|
|
|
|||
|
|
# 数字开头的文件 -> 场景图系列
|
|||
|
|
"2.试驾小景.jpg": "场景图_01.jpg",
|
|||
|
|
"3.小米汽车.jpg": "场景图_02.jpg",
|
|||
|
|
|
|||
|
|
# 中文名保留但规范化
|
|||
|
|
"博览会.jpg": "场景图_03.jpg",
|
|||
|
|
"展会内部参观.jpg": "场景图_04.jpg",
|
|||
|
|
"展馆布置图.jpeg": "场景图_05.jpg", # 注意是jpeg
|
|||
|
|
"签到.jpg": "场景图_06.jpg"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 处理图片重命名
|
|||
|
|
print("\n📝 开始重命名图片...")
|
|||
|
|
renamed_count = 0
|
|||
|
|
|
|||
|
|
for old_name, new_name in rename_mapping.items():
|
|||
|
|
old_path = image_dir / old_name
|
|||
|
|
new_path = image_dir / new_name
|
|||
|
|
|
|||
|
|
if old_path.exists():
|
|||
|
|
try:
|
|||
|
|
# 如果是jpeg转jpg
|
|||
|
|
if old_name.endswith('.jpeg'):
|
|||
|
|
# 复制并转换格式
|
|||
|
|
shutil.copy2(old_path, new_path)
|
|||
|
|
old_path.unlink() # 删除原文件
|
|||
|
|
else:
|
|||
|
|
# 直接重命名
|
|||
|
|
shutil.move(str(old_path), str(new_path))
|
|||
|
|
|
|||
|
|
renamed_count += 1
|
|||
|
|
print(f" ✓ {old_name} → {new_name}")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f" ✗ 失败 {old_name}: {e}")
|
|||
|
|
else:
|
|||
|
|
print(f" ⚠ 文件不存在: {old_name}")
|
|||
|
|
|
|||
|
|
print(f"\n✅ 重命名完成: {renamed_count}/{len(rename_mapping)} 个文件")
|
|||
|
|
|
|||
|
|
# 更新Markdown文件中的引用
|
|||
|
|
print("\n📝 更新Markdown文件...")
|
|||
|
|
md_files = list(notion_dir.glob("*.md"))
|
|||
|
|
|
|||
|
|
for md_file in md_files:
|
|||
|
|
print(f" 处理: {md_file.name}")
|
|||
|
|
try:
|
|||
|
|
content = md_file.read_text(encoding='utf-8')
|
|||
|
|
original_content = content
|
|||
|
|
|
|||
|
|
# 替换所有图片引用
|
|||
|
|
for old_name, new_name in rename_mapping.items():
|
|||
|
|
# 处理各种可能的引用格式
|
|||
|
|
# 1. 
|
|||
|
|
content = content.replace(f"]({old_name})", f"](./image/{new_name})")
|
|||
|
|
# 2. 
|
|||
|
|
content = content.replace(f"](./image/{old_name})", f"](./image/{new_name})")
|
|||
|
|
# 3. 
|
|||
|
|
content = content.replace(f"](image/{old_name})", f"](./image/{new_name})")
|
|||
|
|
# 4. 直接的文件名引用
|
|||
|
|
content = re.sub(
|
|||
|
|
f"(?<![/])\\b{re.escape(old_name)}\\b",
|
|||
|
|
f"./image/{new_name}",
|
|||
|
|
content
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 确保所有图片引用都指向./image/目录
|
|||
|
|
# 修正可能的错误路径
|
|||
|
|
content = re.sub(
|
|||
|
|
r'!\[([^\]]*)\]\((?!\.?/image/)([^)]+\.(jpg|jpeg|png))\)',
|
|||
|
|
r'',
|
|||
|
|
content,
|
|||
|
|
flags=re.IGNORECASE
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if content != original_content:
|
|||
|
|
md_file.write_text(content, encoding='utf-8')
|
|||
|
|
print(f" ✓ 已更新")
|
|||
|
|
else:
|
|||
|
|
print(f" - 无需更新")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f" ✗ 失败: {e}")
|
|||
|
|
|
|||
|
|
# 创建图片索引
|
|||
|
|
print("\n📝 创建图片索引...")
|
|||
|
|
create_index(image_dir)
|
|||
|
|
|
|||
|
|
print("\n" + "=" * 60)
|
|||
|
|
print("✅ 文旅订单班图片整理完成!")
|
|||
|
|
print("=" * 60)
|
|||
|
|
|
|||
|
|
def create_index(image_dir: Path):
|
|||
|
|
"""创建图片索引文件"""
|
|||
|
|
images = sorted(image_dir.glob("*.jpg"))
|
|||
|
|
|
|||
|
|
if not images:
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
# 分类
|
|||
|
|
categories = {
|
|||
|
|
"设计图": [],
|
|||
|
|
"场景图": [],
|
|||
|
|
"其他": []
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for img in images:
|
|||
|
|
name = img.name
|
|||
|
|
if name.startswith("设计图"):
|
|||
|
|
categories["设计图"].append(name)
|
|||
|
|
elif name.startswith("场景图"):
|
|||
|
|
categories["场景图"].append(name)
|
|||
|
|
else:
|
|||
|
|
categories["其他"].append(name)
|
|||
|
|
|
|||
|
|
# 生成索引内容
|
|||
|
|
content = "# 文旅订单班 - 图片资源索引\n\n"
|
|||
|
|
content += f"**图片总数**: {len(images)} 张\n"
|
|||
|
|
content += f"**更新时间**: 2025-09-28\n\n"
|
|||
|
|
|
|||
|
|
for cat, files in categories.items():
|
|||
|
|
if files:
|
|||
|
|
content += f"## {cat} ({len(files)}张)\n\n"
|
|||
|
|
for file in files:
|
|||
|
|
content += f"- {file}\n"
|
|||
|
|
content += "\n"
|
|||
|
|
|
|||
|
|
content += """## 使用说明
|
|||
|
|
|
|||
|
|
在Markdown中引用图片:
|
|||
|
|
```markdown
|
|||
|
|

|
|||
|
|
```
|
|||
|
|
|
|||
|
|
图片分类:
|
|||
|
|
- **设计图**: Whisk AI生成的展会设计效果图
|
|||
|
|
- **场景图**: 实际展会场景照片
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
# 保存索引
|
|||
|
|
index_file = image_dir.parent / "图片索引.md"
|
|||
|
|
index_file.write_text(content, encoding='utf-8')
|
|||
|
|
print(f" ✓ 索引已创建: {index_file.name}")
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
main()
|