main.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import os
  2. import re
  3. import sys
  4. import traceback
  5. import openpyxl
  6. import pandas as pd
  7. from openpyxl.utils import get_column_letter
  8. from openpyxl.worksheet.pagebreak import Break
  9. import config
  10. number = 1
  11. def resource_path(relative_path):
  12. if getattr(sys, 'frozen', False): # 是否Bundle Resource
  13. base_path = sys._MEIPASS
  14. else:
  15. base_path = os.path.abspath(".")
  16. return os.path.join(base_path, relative_path)
  17. def main():
  18. marker_template_file = openpyxl.load_workbook(resource_path(os.path.join("template", "评卷员数据导入模板.xlsx")))
  19. marker_print_file = openpyxl.load_workbook(resource_path(os.path.join("template", "评卷员打印模板.xlsx")))
  20. marker_sheet = marker_template_file.active
  21. marker_sheet_active = marker_print_file.active
  22. marker_sheet_active.column_dimensions[get_column_letter(4)].width = 25
  23. # start_row = 3
  24. start_print_row = 2
  25. if config.inputfilepath.endswith(".xlsx"):
  26. if not os.path.exists(os.getcwd() + os.sep + config.inputfilepath):
  27. raise Exception("在同级目录下未找到%s名称的文件" % (config.inputfilepath))
  28. dataframe = pd.read_excel(os.getcwd() + os.sep + config.inputfilepath, header=1)
  29. dataframe_groupby = dataframe.groupby(by=["科目代码", "评卷分组(只能用小写数字)"])
  30. courseCode = None
  31. for index, data in dataframe_groupby:
  32. marker_number = config.makernumber
  33. if not courseCode:
  34. courseCode = index[0]
  35. else:
  36. if courseCode != index[0]:
  37. page_break = Break(id=marker_sheet_active.max_row)
  38. marker_sheet_active.page_breaks[0].append(page_break)
  39. courseCode = index[0]
  40. for i in range(0, int(marker_number) + 1):
  41. questionnameLst = data["大题名称"].map(str) + "-" + data["小题号(只能用小写数字)"].map(str)
  42. markerdata = {"courseCode": str(index[0]), "markergroup": str(index[1])}
  43. markername = createMarkerName(markerdata)
  44. markername = createpostfix(markername, i + 1)
  45. marker_sheet_active.append(
  46. [str(index[0]), data["科目名称"].values[0], str(index[1]), ",".join(questionnameLst.values),
  47. markername])
  48. marker_sheet.append(
  49. [str(index[0]), "", str(index[1]), markername])
  50. start_print_row = start_print_row + 1
  51. if not os.path.exists(os.getcwd() + os.sep + "result"):
  52. os.makedirs(os.getcwd() + os.sep + "result")
  53. marker_template_file.save(os.getcwd() + os.sep + "result" + os.sep + "评卷员数据导入模板.xlsx")
  54. marker_print_file.save(os.getcwd() + os.sep + "result" + os.sep + "评卷员打印模板.xlsx")
  55. else:
  56. raise Exception("只支持xlsx文件")
  57. def createMarkerName(data):
  58. # 根据rule生成markername
  59. # mainnumber,coursecode,subnumber,markergroup
  60. # {add:"",subnumber:"",courseCode:"",markergroup:""}
  61. rule = config.rule
  62. taglist = rule.split("-")
  63. markertag = []
  64. for tag in taglist:
  65. pattern = r"\$\{(mainnumber|subnumber|courseCode|markergroup)\}"
  66. result = re.search(pattern, tag)
  67. if result:
  68. tagname = result[1]
  69. markertag.append(data[tagname])
  70. else:
  71. markertag.append(tag)
  72. return "-".join(markertag)
  73. def createpostfix(markername, groupnumber):
  74. global number
  75. if config.postfix == "add":
  76. markername = markername + "-" + str(number)
  77. number = number + 1
  78. else:
  79. markername = markername + "-" + str(groupnumber)
  80. return markername
  81. if __name__ == "__main__":
  82. try:
  83. if os.path.exists(os.getcwd() + os.sep + "error.log"):
  84. os.remove(os.getcwd() + os.sep + "error.log") # 首先删除错误文件
  85. main()
  86. except:
  87. errordata = traceback.format_exc()
  88. with open(os.getcwd() + os.sep + "error.log", "w") as file:
  89. file.write(errordata)