【办公类-50-01】20240620自主游戏观察记录表19周内容打乱

news2024/11/29 6:39:06

背景需求:

又到了期末,各种班级资料需要提交。

有一份自主游戏观察记录需要写19周(每周2次)的观察记录,并根据参考书填写一级、三级、五级的评价指标。

去年中六班的时候,我很认真的手写了21周的户外游戏活动内容,主动成为2个需要提交文本资料的班级。

今年组长选了中二和中五提交打印资料。因此中四班的游戏观察资料可以不那么“优质”,所以本学期我想“偷个懒”,再次使用去年的内容做电子稿提交。

考虑到这套资料也给过其他班级,我担心会出现重复,所以有两个调整的思路:

1、将每个周次的内容进行替换,如原来第1周的内容放到第15周,第13周内容调到第2周。

2、虽然内容没有修改,但至少将孩子的名字替换成新的名字(中四班孩子的小名)

设计过程。

1、原素材

2、模板

3、代码思路

(1)读取原素材表格中各个单元格里面的内容,新建一个excel并保存这些内容

 (2)手动更改小名:因为不确定出现哪些名字,需要把表格拉宽,查看里面的名字。这里程序要会暂停。

(3)改完以后,打乱行的顺序,把文字内容重写排列,

(4)把excel每行内容生成一个docx,把所有doc合并在一起

然后程序把所有的docx合并在一个docx内

部分表格手动调整(删除回车符),确保每个表格内容都在一页上。

代码展示:

'''
项目:期末资料:19周游戏观察记录内容周次调换
工具:星火讯飞、阿夏
时间:2024年6月20日
'''

import re
import pandas as pd
from docx import Document
import time

for y in range(5):

    path = r'C:\Users\jg2yXRZ\OneDrive\桌面\游戏观察记录'
    # 读取1.docx文件
    doc = Document(path + r"\中(6)班自主游戏观察记录(202302-202306)全部户外.docx")

    weeks=19 # 一共几周
    name1='张三'
    name2='李四'
    


    print('---1、提取原来的游戏观察记录内容-----')
    # 提取所有段落中“第”和“周”之间的内容
    results = []
    for paragraph in doc.paragraphs:
        content = paragraph.text
        pattern = r"第(.*?)周"
        result = re.findall(pattern, content)
        if result:
            results.extend(result)

    # 缩进2字符
    b='    ' 

    table_data1 = []
    for table in doc.tables:
        cell_value1 = table.cell(0, 0).text.replace(" ", "")  # 清除缩进
        lines1 = cell_value1.split('\n')
        del lines1[0]  # 删除第一行
        new_lines1 = [b + line for line in lines1]  # 在每行前面加四个空格
        new_cell_value1 = '\n'.join(new_lines1)
        table_data1.append(new_cell_value1)
        print(new_cell_value1)

    table_data2 = []
    for table in doc.tables:
        cell_value2 = table.cell(2, 0).text.replace(" ", "")   # 清除缩进
        lines2 = cell_value2.split('\n')
        del lines2[0]  # 删除第一行
        new_lines2 = [b + line for line in lines2]  # 在每行前面加四个空格
        new_cell_value2 = '\n'.join(new_lines2)
        table_data2.append(new_cell_value2)
        print(new_cell_value2)

    table_data3 = []
    for table in doc.tables:
        cell_value3 = table.cell(0, 1).text.replace(" ", "")   # 清除缩进
        lines3 = cell_value3.split('\n')
        del lines3[0]  # 删除第一行
        new_lines3 = [b + line for line in lines3]  # 在每行前面加四个空格
        new_cell_value3 = '\n'.join(new_lines3)
        table_data3.append(new_cell_value3)
        print(new_cell_value3)

    table_data4 = []
    for table in doc.tables:
        cell_value4 = table.cell(2, 1).text.replace(" ", "")   # 清除缩进
        lines4 = cell_value4.split('\n')
        del lines4[0]  # 删除第一行
        new_lines4 = [b + line for line in lines4]  # 在每行前面加四个空格
        new_cell_value4 = '\n'.join(new_lines4)
        table_data4.append(new_cell_value4)
        print(new_cell_value4)

    table_data5= []
    for table in doc.tables:
        cell_value5 = table.cell(1, 1).text.replace(" ", "")   # 清除缩进
        print(cell_value5)
        table_data5.append(cell_value5[3:])
        # print(new_cell_value5)

    table_data6= []
    for table in doc.tables:
        cell_value6 = table.cell(3, 1).text.replace(" ", "")   # 清除缩进
        print(cell_value6)
        table_data6.append(cell_value6[3:])
        # print(new_cell_value5) 

    df = pd.DataFrame({'Week': results, 'content1': table_data1,'content2': table_data2,'fx1': table_data3,'fx2': table_data4,'T1': table_data5,'T2': table_data6})
    df.to_excel(path + '\\数据导出改人名.xlsx', index=False)

    # 手动改人名
    print("手动改人名,按任意键继续...")
    input()  # 这里会暂停程序,直到用户输入信息
    print("程序继续执行...")

    print('---2、手动改人名,随机抽取行数,重新保存一份----')

    import pandas as pd

    # 读取Excel文件
    data = pd.read_excel(path + '\\数据导出改人名.xlsx')

    # 获取行数
    num_rows = len(data)
    print(num_rows)
    # 19

    # 打乱行顺序
    shuffled_data = data.sample(frac=1).reset_index(drop=True)

    # 保存打乱顺序后的数据为新的Excel文件
    shuffled_data.to_excel(path +r'\更换顺序.xlsx', index=False)

    # 更改周次和姓名
    import openpyxl



    # 打开Excel文件
    workbook = openpyxl.load_workbook(path +r'\更换顺序.xlsx')

    # 选择工作表
    worksheet = workbook.active

    # 在A列第2行开始写入1-20的数字
    for i in range(2, num_rows+2):
        worksheet.cell(row=i, column=1).value = i - 1

    # 在F列写入教室A的名字
    for i in range(2, num_rows+2):
        worksheet.cell(row=i, column=6).value = name1
    # 在G列写入教室A的名字
    for i in range(2, num_rows+2):
        worksheet.cell(row=i, column=7).value = name2

        time.sleep(2)
    # 保存修改后的Excel文件
    workbook.save(path+r'\更换顺序.xlsx')


    print('---3、写入模板生成新的文件--')

    import os
    import pandas as pd
    from docxtpl import DocxTemplate


    file_path = path + r'\04合成2'
    try:
        os.mkdir(file_path)
    except:
        pass

    list = pd.read_excel(path + '\\更换顺序.xlsx')

    Week= list["Week"]
    content1 = list["content1"].str.rstrip()
    content2 = list["content2"].str.rstrip()
    fx1 = list["fx1"].str.rstrip()
    fx2 = list["fx2"].str.rstrip()
    T1 = list["T1"].str.rstrip()
    T2 = list["T2"].str.rstrip()


    num = list.shape[0]
    for i, (w, c1, c2, f1, f2 ,t1, t2) in enumerate(zip(Week, content1, content2, fx1,fx2,T1, T2)):
        context = {
            "Week": w,
            "content1": c1, 
            "content2": c2,
            "fx1": f1,
            "fx2": f2, 
            "T1": t1,
            "T2": t2,
        }
        tpl = DocxTemplate(path + '\\模版游戏观察记录与反思(2024.1).docx')
        tpl.render(context)
        time.sleep(4)
        tpl.save(file_path + fr"\第{i+1:02d}周.docx")





    print('---4、合并文档--')
    import os
    import shutil
    from docx import Document


    def merge_docx_files(input_folder, output_file):
        output_doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\游戏观察记录\04合成2\第01周.docx')   

        files = os.listdir(input_folder)
        for index, file in enumerate(files):
            if file.endswith(".docx") and index != 0:
                input_file = os.path.join(input_folder, file)
                input_doc = Document(input_file)
                # output_doc.add_page_break()  # 添加换页符
                
                for element in input_doc.element.body:    
                    output_doc.element.body.append(element)
        time.sleep(2)

        output_doc.save(output_file)

    input_folder = file_path
    output_file = path+fr"\{y:02d}中4班 游戏活动观察记录(202402-202406)全部户外.docx"
    merge_docx_files(input_folder, output_file)

存在问题:

本代码有一个问题,就是每次提取的文字会有缺失,原因不明,

所以我就生成多份随机排序的文件,从中挑选一个内容相对多的文件,作为提交的电子稿的资料。

运气好,以下这份文字较为齐全(撑满格子)

哎,偷懒就不能保证打乱文字的稳定性,所以要多抽几次博一个成功的概率,或者还是乖乖的自己手写吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1851126.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

laravel8框架windows下安装运行

目录 1、安装前如果未安装先安装Composer 2、使用composer安装laravel8 3、使用内置服务器:8000 的命令去访问测试 ​4、使用本地环境运行phpstudy配置到public目录下 Laravel官网 Laravel 中文网 为 Web 工匠创造的 PHP 框架 安装 | 入门指南 |《Laravel 8 中文文档 8.x…

Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)

目录 Nginx 开始 概述 安装(非 Docker) 配置环境变量 常用命令 配置文件概述 location 路径匹配方式 配置反向代理 实现效果 准备工作 具体配置 效果演示 配置负载均衡 实现效果 准备工作 具体配置 实现效果 其他负载均衡策略 配置动…

一文了解Linux中的内存映射

目录 一、概念 工作原理: 特点: 适用场景: 二、详解mmap()函数 1. mmap的基本概念 2. mmap的特点 3. mmap的用途 4. mmap的优缺点 三、实验 实验一:基础读写实验 实验二:证明开始显…

计算机组成原理 —— 存储系统(主存储器基本组成)

计算机组成原理 —— 存储系统(主存储器基本组成) 0和1的硬件表示整合结构寻址按字寻址和按字节寻址按字寻址按字节寻址区别总结 字寻址到字节寻址转化 我们今天来看一下主存储器的基本组成: 0和1的硬件表示 我们知道一个主存储器是由存储体…

plt绘制网格图

代码 obj "accu" for (epoch,lr) in config:with open(data/epoch_{}_lr_{}_Adam.pkl.format(epoch,lr),rb) as f:data pickle.load(f) plt.plot(range(1,epoch1),data[obj],labelflr{lr})plt.title(obj"-epoch") plt.xlabel("epoch"…

Linux系统及常用命令介绍

一.介绍 Linux一套免费使用和自由传播的类Unix操作系统,是一个遵循POSIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux系统的说明可以自行百度,知道这几点即可: 1.Linux中一切都是文件; 2.Linux是一款免费操作系统&…

云资源管理系统-项目部署

云资源管理系统-项目部署 大家好,我是秋意零。 今天分享个人项目同时也是个人毕设项目,云平台资源管理系统。该系统具备对OpenStack最基本资源的生命周期管理,如:云主机、云盘、镜像、网络。 该篇主要介绍,项目在Li…

STM32读取芯片内部温度

基于stm32f103cbt6这款芯片,原理部分请参考其他文章,此文章为快速上手得到结果,以结果为导向。 1.基础配置 打开stm32cubemx只需要勾选中 ADC1 Temperature Sensor Channel 2.代码分析 /** 函数名:float GetAdcAnlogValue(voi…

《计算机英语》 Unit 3 Software Engineering 软件工程

Section A Software Engineering Methodologies 软件工程方法论 Software development is an engineering process. 软件开发是一个工程过程。 The goal of researchers in software engineering is to find principles that guide the software development process and lea…

开启数字新纪元:全球首款开源AI女友,你的私人数字伴侣

在这个数字化飞速发展的时代,人工智能已经不再是科幻小说中的幻想,而是实实在在走进了我们的生活。今天,我们要介绍的,不仅仅是一项技术革新,更是一场关于陪伴的革命——全球首款开源AI女友,DUIX,已经横空出世! 🚀 革命性的开源平台 DUIX,由硅基智能精心打造,不…

GLM-4V模型学习

智谱AI引领技术前沿,推出了新一代预训练模型GLM-4系列,其中的GLM-4-9B作为开源版本,展现了其在人工智能领域的深厚实力。在语义理解、数学运算、逻辑推理、代码编写以及广泛知识领域的数据集测评中,GLM-4-9B及其人类偏好对齐的版本…

慎投!新增7本期刊被“On Hold“,14本影响因子下降!

本周投稿推荐 SSCI • 中科院2区,6.0-7.0(录用友好) EI • 各领域沾边均可(2天录用) CNKI • 7天录用-检索(急录友好) SCI&EI • 4区生物医学类,0.5-1.0(录用…

大学生须知~~毕业行李太多,怎么拿回家

一年一度的暑假来临了,大学生们又该放假了,可是回家行李这么多,怎么邮寄才便宜呢?? 记得找惠发快递呀!因为我们平台是跟快递总部合作的,不管你寄大件还是快递都很便宜,而且没有单量…

转--Hadoop集群部署案例

模块简介 本模块主要练习Hadoop集群部署。 模块知识 ● 使用Linux基础命令 ● Hadoop集群搭建部署知识 环境准备 三台CentOS7操作系统的虚拟机 可以是3个Docker容器,也可以是三个VMWare/VirtualBox的虚拟机。三台虚拟机的最低配置为1核1G 20G。如果是虚拟机中…

20分钟攻破DISCUZ论坛并盗取数据库(web安全白帽子)

20分钟攻破DISCUZ论坛并盗取数据库(web安全白帽子) 1 快速搭建discuz论坛1.1 攻击思路1.2 快速搭建实验环境1.2.1,漏洞概述1.2.2,在centos7虚拟机上搭建LAMP环境1.2.3,上传到discuz_X2_SC_UTF8.zip 到Linux系统/root下…

Android 添加自己的时钟小部件

小部件,也叫微件, 它的介绍参考官网 应用 widget 概览 https://developer.android.google.cn/develop/ui/views/appwidgets/overview?hlzh-cn 直接上图,原生系统上,时钟应用的小部件效果。 我也整一个。 1.创建小部件布局文…

C#使用轻量级深度学习模型进行车牌颜色识别和车牌号识别

看到这个文章时候请注意这个不涉及到车牌检测,这个仅仅是车牌颜色和车牌号识别,如果想涉及到车牌检测可以参考这个博客:[C#]winform部署yolov7CRNN实现车牌颜色识别车牌号检测识别_c# yolo 车牌识别-CSDN博客 【训练源码】 https://github.…

已解决java.rmi.activation.ActivationException异常的正确解决方法,亲测有效!!!

已解决java.rmi.activation.ActivationException异常的正确解决方法,亲测有效!!! 问题分析 java.rmi.activation.ActivationException 是与Java RMI(远程方法调用)的激活机制相关的一种已检查异常。这个异…

【面试干货】Hashtable 与 HashMap 的区别

【面试干货】Hashtable 与 HashMap 的区别 1、线程安全性2、对null值的处理3、遍历方式4、遍历示例5、总结 💖The Begin💖点点关注,收藏不迷路💖 在Java中,Hashtable和HashMap都是基于哈希表实现的Map接口。然而&#…

代码随想录算法训练营第31天| 134. 加油站、135. 分发糖果、860.柠檬水找零、 406.根据身高重建队列

134. 加油站 题目链接:134. 加油站 文档讲解:代码随想录 状态:so easy 思路:每次遍历时,如果当前的油量差(currTank)小于0,说明从当前起点无法到达下一个加油站。此时,将…