excel_log.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. """
  2. 采集数据 Excel 备份 — 按天一个文件,一个药品(搜索词)一个工作表
  3. 列: 标题 | 价格 | 店铺名(列表页OCR) | 店铺名(AI详情页) | 快照URL | 商品链接 | 来源截图
  4. 用途: 对比列表页OCR店铺名和详情页AI提取店铺名的差异;来源截图供 audit_ocr.py 事后核对OCR准确率
  5. 文件: 采集数据/YYYYMMDD.xlsx,sheet = 药品名
  6. """
  7. import re
  8. import time
  9. from pathlib import Path
  10. EXCEL_DIR = Path(__file__).parent / "采集数据"
  11. HEADERS = ["标题", "价格", "店铺名(列表页OCR)", "店铺名(AI详情页)", "快照URL", "商品链接", "来源截图"]
  12. def _safe_sheet_name(name: str) -> str:
  13. """Excel sheet名限制:≤31字符,不允许 []:*?/\\ """
  14. name = re.sub(r'[\[\]:*?/\\]', '', str(name or "")).strip()
  15. return (name or "采集")[:31]
  16. def append_row(title: str, price: str, shop_list: str, shop_ai: str,
  17. snapshot_url: str, link: str, sheet_name: str = "",
  18. source: str = "") -> None:
  19. """追加一行到当天 Excel 的对应药品 sheet,失败只打印不抛异常(不影响采集主流程)
  20. source: 来源截图标识(如 OV7T8PV8GEHYSCNB/step3_b5),供事后OCR准确率核对追溯"""
  21. try:
  22. from openpyxl import Workbook, load_workbook
  23. except ImportError:
  24. print("[excel] 未安装 openpyxl,跳过Excel备份(pip install openpyxl)")
  25. return
  26. try:
  27. EXCEL_DIR.mkdir(exist_ok=True)
  28. path = EXCEL_DIR / f"{time.strftime('%Y%m%d')}.xlsx"
  29. sheet = _safe_sheet_name(sheet_name)
  30. if path.exists():
  31. wb = load_workbook(path)
  32. if sheet in wb.sheetnames:
  33. ws = wb[sheet]
  34. else:
  35. ws = wb.create_sheet(sheet)
  36. ws.append(HEADERS)
  37. else:
  38. wb = Workbook()
  39. ws = wb.active
  40. ws.title = sheet
  41. ws.append(HEADERS)
  42. ws.append([
  43. str(title or ""), str(price or ""),
  44. str(shop_list or ""), str(shop_ai or ""),
  45. str(snapshot_url or ""), str(link or ""),
  46. str(source or ""),
  47. ])
  48. wb.save(path)
  49. print(f"[excel] 已保存: {path.name} [{sheet}]")
  50. except Exception as e:
  51. print(f"[excel] 保存失败: {e}")