import json import csv from django.core.management.base import BaseCommand from university.models import OnlineExamQuestion def format_answer(answer): return answer if isinstance(answer, str) else ', '.join(answer) class Command(BaseCommand): def handle(self, *args, **options): data = {"240": {"answer": ["A", "E"], "wrong_answers": [["C", "D", "A", "B", "E"], ["C", "D", "B", "E"], ["B", "A", "C", "E"]], "count": 3, "wrong_rate": 0.75}, "257": {"answer": ["B", "D", "E"], "wrong_answers": [["D", "C", "B", "E"], ["B", "E"], ["A", "D", "E"]], "count": 3, "wrong_rate": 0.75}, "268": {"answer": ["A", "E"], "wrong_answers": [["A"]], "count": 1, "wrong_rate": 0.25}, "295": {"answer": ["A", "D", "E"], "wrong_answers": [["A", "E"], ["A", "D"], ["D", "A"], ["A", "E"]], "count": 4, "wrong_rate": 1.0}, "303": {"answer": ["C", "E"], "wrong_answers": [["A", "B"], ["B", "A"], ["C", "A"]], "count": 3, "wrong_rate": 0.75}, "308": {"answer": "B", "wrong_answers": ["D", "E"], "count": 2, "wrong_rate": 0.5}, "328": {"answer": ["A", "B", "E"], "wrong_answers": [["A", "C", "E"], ["A", "B"], ["B", "E"]], "count": 3, "wrong_rate": 0.75}, "332": {"answer": ["A", "B", "E"], "wrong_answers": [["A", "B", "D", "E"], ["B", "C", "E"]], "count": 2, "wrong_rate": 0.5}, "336": {"answer": ["A", "B", "D", "E"], "wrong_answers": [["C", "B", "D", "A", "E"], ["A", "D", "B", "C", "E"]], "count": 2, "wrong_rate": 0.5}, "343": {"answer": ["A", "B", "C", "D", "E"], "wrong_answers": [["A", "B", "C", "E"], ["A", "B", "C", "E"]], "count": 2, "wrong_rate": 0.5}, "351": {"answer": "A", "wrong_answers": [], "count": 0}, "355": {"answer": ["A", "B", "C", "D", "E"], "wrong_answers": [], "count": 0}, "363": {"answer": ["B", "C"], "wrong_answers": [["C", "D", "B"], ["B"], ["B"], ["A", "C", "B"]], "count": 4, "wrong_rate": 1.0}, "366": {"answer": "B", "wrong_answers": [["A", "D"], ["D", "C"], ["B", "D", "C", "A"]], "count": 3, "wrong_rate": 0.75}, "383": {"answer": "B", "wrong_answers": ["C", "A", "D", "D"], "count": 4, "wrong_rate": 1.0}, "389": {"answer": "C", "wrong_answers": [], "count": 0}, "392": {"answer": ["A", "C", "D", "E"], "wrong_answers": [["A", "D", "C"]], "count": 1, "wrong_rate": 0.25}, "409": {"answer": ["B", "C", "D"], "wrong_answers": [["B", "D"], ["D", "A", "C", "E"], ["C", "A", "D"]], "count": 3, "wrong_rate": 0.75}, "422": {"answer": ["C", "D"], "wrong_answers": [["D", "A"], ["D", "A"]], "count": 2, "wrong_rate": 0.5}, "447": {"answer": "E", "wrong_answers": ["B"], "count": 1, "wrong_rate": 0.25}, "451": {"answer": ["A", "B", "D", "E"], "wrong_answers": [["D", "E"], ["B", "A", "E"], ["B", "A", "E"], ["A", "B", "E"]], "count": 4, "wrong_rate": 1.0}, "455": {"answer": ["C", "D", "E"], "wrong_answers": [["C", "D"], ["D", "E"], ["C", "D"], ["D", "C"]], "count": 4, "wrong_rate": 1.0}, "457": {"answer": ["A", "B", "D"], "wrong_answers": [["B"], ["A", "B", "E"], ["A", "D", "E"], ["A", "D", "E"]], "count": 4, "wrong_rate": 1.0}, "476": {"answer": "B", "wrong_answers": ["E", "A"], "count": 2, "wrong_rate": 0.5}, "479": {"answer": "E", "wrong_answers": [], "count": 0}, "481": {"answer": ["A", "C", "D", "E"], "wrong_answers": [["C", "A", "E"], ["C", "D", "A"], ["D", "C", "B", "E"]], "count": 3, "wrong_rate": 0.75}, "488": {"answer": "D", "wrong_answers": ["B"], "count": 1, "wrong_rate": 0.25}, "505": {"answer": "D", "wrong_answers": ["A"], "count": 1, "wrong_rate": 0.25}, "507": {"answer": ["A", "B", "C", "D"], "wrong_answers": [], "count": 0}, "518": {"answer": ["A", "C", "D", "E"], "wrong_answers": [["C", "E"], ["D", "C", "E"]], "count": 2, "wrong_rate": 0.5}, "544": {"answer": ["A", "C", "D", "E"], "wrong_answers": [["B", "E"], ["A", "E"]], "count": 2, "wrong_rate": 0.5}, "547": {"answer": "E", "wrong_answers": [["B"], ["B", "E"], ["B"]], "count": 3, "wrong_rate": 0.75}, "552": {"answer": "E", "wrong_answers": [], "count": 0}, "561": {"answer": "E", "wrong_answers": [], "count": 0}, "563": {"answer": "C", "wrong_answers": [["A"], ["A"], ["A"], ["A", "B"]], "count": 4, "wrong_rate": 1.0}, "618": {"answer": ["A", "B", "C", "D"], "wrong_answers": [], "count": 0}, "619": {"answer": ["A", "C"], "wrong_answers": [["B", "A", "C"]], "count": 1, "wrong_rate": 0.25}, "626": {"answer": "A", "wrong_answers": [["C", "A"], ["C", "A"]], "count": 2, "wrong_rate": 0.5}, "629": {"answer": ["A", "D"], "wrong_answers": [["D", "A", "E"]], "count": 1, "wrong_rate": 0.25}, "637": {"answer": ["A", "C", "D", "E"], "wrong_answers": [["A", "B", "C", "D", "E"], ["C", "B", "A", "D", "E"], ["A", "D", "C", "B", "E"]], "count": 3, "wrong_rate": 0.75}, "644": {"answer": "D", "wrong_answers": [["B"], ["C", "B"], ["D", "B", "C"], ["D", "C"]], "count": 4, "wrong_rate": 1.0}, "647": {"answer": "B", "wrong_answers": [], "count": 0}, "656": {"answer": "E", "wrong_answers": [], "count": 0}, "662": {"answer": ["C", "E"], "wrong_answers": [["A", "E"], ["D", "C"]], "count": 2, "wrong_rate": 0.5}, "665": {"answer": ["A", "D"], "wrong_answers": [["D", "A", "E"]], "count": 1, "wrong_rate": 0.25}, "677": {"answer": "E", "wrong_answers": ["B"], "count": 1, "wrong_rate": 0.25}, "690": {"answer": "E", "wrong_answers": ["D", "A"], "count": 2, "wrong_rate": 0.5}, "693": {"answer": ["A", "B", "E"], "wrong_answers": [["B", "E"], ["D", "A", "C", "B"], ["A", "B"], ["B", "E"]], "count": 4, "wrong_rate": 1.0}, "694": {"answer": "A", "wrong_answers": ["B", "C", "C"], "count": 3, "wrong_rate": 0.75}, "697": {"answer": ["A", "E"], "wrong_answers": [["E"], ["B", "C", "D"], ["C", "D", "B"]], "count": 3, "wrong_rate": 0.75}, "705": {"answer": "B", "wrong_answers": ["C", "E", "C"], "count": 3, "wrong_rate": 0.75}, "716": {"answer": ["C", "D"], "wrong_answers": [["D"], ["D"], ["A", "C"]], "count": 3, "wrong_rate": 0.75}, "719": {"answer": "B", "wrong_answers": ["E", "C", "C"], "count": 3, "wrong_rate": 0.75}, "742": {"answer": "A", "wrong_answers": ["C"], "count": 1, "wrong_rate": 0.25}, "743": {"answer": ["B", "C", "D", "E"], "wrong_answers": [["B", "D", "E"], ["B", "E"]], "count": 2, "wrong_rate": 0.5}, "760": {"answer": ["A", "B", "C", "E"], "wrong_answers": [["A", "C", "B"], ["C", "A"]], "count": 2, "wrong_rate": 0.5}, "762": {"answer": "D", "wrong_answers": ["E"], "count": 1, "wrong_rate": 0.25}, "771": {"answer": "C", "wrong_answers": ["A"], "count": 1, "wrong_rate": 0.25}, "772": {"answer": "E", "wrong_answers": ["B", "B"], "count": 2, "wrong_rate": 0.5}, "782": {"answer": ["A", "B", "D"], "wrong_answers": [["B", "D"], ["D", "B"]], "count": 2, "wrong_rate": 0.5}, "790": {"answer": "C", "wrong_answers": ["D", "D", "A"], "count": 3, "wrong_rate": 0.75}, "792": {"answer": "C", "wrong_answers": ["B", "B"], "count": 2, "wrong_rate": 0.5}, "795": {"answer": ["C", "E"], "wrong_answers": [], "count": 0}, "801": {"answer": ["B", "E"], "wrong_answers": [], "count": 0}, "994": {"answer": "B", "wrong_answers": ["D", "E", "C", "D"], "count": 4, "wrong_rate": 1.0}, "1004": {"answer": "C", "wrong_answers": ["B", "B", "E"], "count": 3, "wrong_rate": 0.75}, "1010": {"answer": ["C", "D", "B", "A", "E"], "wrong_answers": [["C", "A", "B", "E"], ["B", "C", "A", "E"]], "count": 2, "wrong_rate": 0.5}, "1019": {"answer": "C", "wrong_answers": [], "count": 0}, "1026": {"answer": ["A", "B", "C", "D", "E"], "wrong_answers": [], "count": 0}, "1028": {"answer": ["A", "B", "C", "D"], "wrong_answers": [["A", "D", "C"], ["B", "A", "D"], ["D", "A", "B", "E"], ["C", "B", "D", "A", "E"]], "count": 4, "wrong_rate": 1.0}} with open('pctp_wrong_problem_collection.csv', 'w', newline='', encoding='utf-8-sig') as csvfile: spamwriter = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) spamwriter.writerow(['ID', '问题', '正确答案', '错误率', '错误答案']) for q_id, d in data.items(): if d['count'] == 0: continue question = OnlineExamQuestion.objects.get(pk=q_id) line = [ '{} 第 {} 题'.format(question.tag, question.comment), question.problem + '\n\n', format_answer(d['answer']), '{}%'.format(round(d['wrong_rate'] * 100, 2)), '' ] for o in question.body: line[1] += '{}: {}\n'.format(o['value'], o['text']) for wrong_answer in d['wrong_answers']: line[4] += '{}\n'.format(format_answer(wrong_answer)) spamwriter.writerow(line)