check_template.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. """
  2. 检查模板文件中的变量
  3. """
  4. import os
  5. from docx import Document
  6. from utils.logger import logger
  7. def check_template_variables(template_path):
  8. """
  9. 检查模板文件中的所有变量
  10. 参数:
  11. template_path: 模板文件路径
  12. 返回:
  13. set: 找到的变量集合
  14. """
  15. logger.info(f"开始检查模板文件: {template_path}")
  16. if not os.path.exists(template_path):
  17. logger.error(f"模板文件不存在: {template_path}")
  18. return set()
  19. doc = Document(template_path)
  20. # 收集文档中的所有文本
  21. all_text = []
  22. # 检查段落中的文本
  23. for i, paragraph in enumerate(doc.paragraphs):
  24. if paragraph.text.strip():
  25. all_text.append(paragraph.text)
  26. logger.info(f"段落 {i}: {paragraph.text}")
  27. # 检查表格中的文本
  28. for t_idx, table in enumerate(doc.tables):
  29. for r_idx, row in enumerate(table.rows):
  30. for c_idx, cell in enumerate(row.cells):
  31. for p_idx, paragraph in enumerate(cell.paragraphs):
  32. if paragraph.text.strip():
  33. all_text.append(paragraph.text)
  34. logger.info(f"表格 {t_idx}, 行 {r_idx}, 列 {c_idx}, 段落 {p_idx}: {paragraph.text}")
  35. # 查找所有变量
  36. variables = set()
  37. for text in all_text:
  38. # 查找形如 {xxx} 的模式
  39. start = 0
  40. while True:
  41. start = text.find('{', start)
  42. if start == -1:
  43. break
  44. end = text.find('}', start)
  45. if end == -1:
  46. break
  47. potential_var = text[start:end+1]
  48. variables.add(potential_var)
  49. start = end + 1
  50. logger.info(f"在模板中找到以下变量: {variables}")
  51. return variables
  52. if __name__ == "__main__":
  53. template_folder = 'template'
  54. template_files = [f for f in os.listdir(template_folder)
  55. if f.lower().endswith('.docx') and not f.startswith('~$')]
  56. if not template_files:
  57. logger.error("模板文件夹中没有找到有效的.docx文件")
  58. else:
  59. # 使用第一个模板文件
  60. template_filename = template_files[0]
  61. template_path = os.path.join(template_folder, template_filename)
  62. variables = check_template_variables(template_path)
  63. print("\n在模板中找到以下变量:")
  64. for var in sorted(variables):
  65. print(f"- {var}")