背景

试卷中存在1~244道题目,需要随机拆分成6份试卷,每份试卷30道题。

程序

import random
#指定读取文件
f = open('exam.txt',encoding='utf-8')
#指定输出文件
out_file = open("out.txt", 'w',encoding='utf-8')
mid_res=[]#指定缓冲区
res = []#指定最终结果
#按行读取文件。如果该行存在指定字符[T],则将其切割
for line in f:
    tmp=line.split('[T]')#tmp即按行读取的内容,为list类型
        #该行存在指定字符[T],执行切割后句子被分成了两部分,存入缓冲区后缓冲区置空
        if len(tmp)>1:
            print(mid_res)
            res.append(mid_res)
            mid_res=[]
            mid_res.append(tmp)
        #该行不存在指定字符[T],不执行切割,句子长度为1。直接存入缓冲区
        else:
            mid_res.append(tmp)
#生成随机数
L1 = random.sample(range(1, 244), 30)#生成1~244的30个随机数
L1.sort()
print(L1)
#res为list类型,是二维数据,res[0]、res[1]...分别存储了指定字符之间的内容,即每一道题的内容
for i in L1:
    for j in range(len(res[i])):
        out_file.writelines(res[i][j])
#关闭输出文件
out_file.close()

改进方向:

1、由txt文档改进至word文档,使其支持图片显示
2、删除变量res为空的首行

附:文件格式

可以按照字符.或[T]进行分割
1.[T]ZE-A-001 4 3 1
( )弹性式压力表的主要特点是结构简单、价格便宜、使用方便、应用广泛。[T/]
[D]√[D/]
2.[T]ZE-A-001 4 3 5
( )膜盒压力表属于弹性式压力表,其量程通常为1kPa~2.5MPa。[T/]
[D]×[D/]