Files
Exam/utils/upload_questions.py
2026-01-09 18:28:10 +08:00

47 lines
1.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import xlrd # xlrd库
from django.db import transaction # 数据库事物
from competition.models import ChoiceInfo, FillInBlankInfo # 题目数据模型
def check_vals(val): # 检查值是否被转换成float如果是将.0结尾去掉
val = str(val)
if val.endswith('.0'):
val = val[:-2]
return val
@transaction.atomic
def upload_questions(file_path=None, bank_info=None):
book = xlrd.open_workbook(file_path) # 读取文件
table = book.sheets()[0] # 获取第一张表
nrows = table.nrows # 获取行数
choice_num = 0 # 选择题数量
fillinblank_num = 0 # 填空题数量
for i in range(1, nrows):
rvalues = table.row_values(i) # 获取行中的值
if (not rvalues[0]) or rvalues[0].startswith('说明'): # 取出多余行
break
if '##' in rvalues[0]: # 选择题
FillInBlankInfo.objects.select_for_update().create(
bank_id=bank_info.bank_id,
question=check_vals(rvalues[0]),
answer=check_vals(rvalues[1]),
image_url=rvalues[6],
source=rvalues[7]
)
fillinblank_num += 1 # 填空题数加1
else: # 填空题
ChoiceInfo.objects.select_for_update().create(
bank_id=bank_info.bank_id,
question=check_vals(rvalues[0]),
answer=check_vals(rvalues[1]),
item1=check_vals(rvalues[2]),
item2=check_vals(rvalues[3]),
item3=check_vals(rvalues[4]),
item4=check_vals(rvalues[5]),
image_url=rvalues[6],
source=rvalues[7]
)
choice_num += 1 # 选择题数加1
bank_info.choice_num = choice_num
bank_info.fillinblank_num = fillinblank_num
bank_info.save()
return choice_num, fillinblank_num