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

背景需求:

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

有一份自主游戏观察记录需要写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)

存在问题:

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于CST的连续域束缚态(BIC)设计与机制研究

关键词:太赫兹,超表面,连续域束缚态,CST,高Q 束缚态的概念最先出现于量子力学中,当粒子被势场约束在特定的区域内运动,即在无限远处波函数等于零的态叫束缚态,例如势阱中的粒子就处…

Map集合之HashMap细说

最近在看面试题,看到了hashmap相关的知识,面试中问的也挺多的,然后我这里记录下来,供大家学习。 Hashmap为什么线程不安全 jdk 1.7中,在扩容的时候因为使用头插法导致链表需要倒转,从而可能出现循环链表问…

百度ai人脸识别项目C#

一、项目描述 本项目通过集成百度AI人脸识别API,实现了人脸检测和识别功能。用户可以上传图片,系统将自动识别人脸并返回识别结果。 二、开发环境 Visual Studio 2019或更高版本.NET Framework 4.7.2或更高版本AForge.NET库百度AI平台人脸识别API 三、…

Django 模版变量

1,模版变量作用 模板变量使用“{{ 变量名 }}” 来表示模板变量前后可以有空格,模板变量名称,可以由数字,字母,下划线组成,不能包含空格模板变量还支持列表,字典,对象 2,…

一文搞懂Linux信号【下】

目录 🚩引言 🚩阻塞信号 🚩信号保存 🚩信号捕捉 🚩操作信号集 1.信号集操作函数 2.其它操作函数 🚩总结: 🚩引言 在观看本博客之前,建议大家先看一文搞懂Linux信…

React hydrateRoot如何实现

React 服务器渲染中,hydrateRoot 是核心,它将服务器段的渲染与客户端的交互绑定在一起,我们知道 React 中 Fiber Tree 是渲染的的核心,那么 React 是怎么实现 hydrateRoot 的呢?首先我们验证一下,hydrateRo…

期货交易豆粕品种详细分析

文章目录 1、豆粕期货标准(2024年6月22号数据)2、豆粕是什么3、豆粕1、5、9合约区别4、影响豆粕的价格因素1、大豆的供应情况。2、豆粕的季节性3、油粕比(豆油和豆粕的价格关系 ) 5、美国大豆的生产/库存炒作6、豆粕双方&#xff…

uniapp实现路由拦截——遇到问题(三)

uniapp路由拦截开发过程中遇到问题 文章目录 uniapp路由拦截开发过程中遇到问题App 无法退出应用监听返回数据结构解决方式模拟原生物理返回键提示不提示,直接退出应用 微信小程序 登录成功返回页面报错效果图不同平台来源页面数据结构解决方式 App 无法退出应用 安…

2005年上半年软件设计师【上午题】试题及答案

文章目录 2005年上半年软件设计师上午题--试题2005年上半年软件设计师上午题--答案2005年上半年软件设计师上午题–试题

C++/Qt 小知识记录7

工作中遇到的一些小问题,总结的小知识记录:C/Qt 小知识7 编译FFMPEG遇到的问题CMakeLists.txt配置FFMPEG的依赖方式: x264在Windows下编译生成*.libVS编译Qt工程时,遇到提示Change Qt Version的情况在QtOsg的窗口上嵌入子窗口&…

面试官:请你实现三栏布局并且优先加载中间内容 我:稳啦- ̗̀(๑ᵔ⌔ᵔ๑)

前言 三栏布局是网页设计中一种经典布局方式,它将页面分为三个垂直部分:左栏、中栏和右栏,三栏在同一行显示。 这种布局模式在很多网站的首页或内容密集型页面中非常常见,因为它能够有效地组织信息,提供良好的用户体…

【产品应用】一体化步进伺服电机在吊装机器人中的应用

随着工业自动化和智能制造的发展,吊挂式智能巡检机器人逐渐成为许多工业场景中的重要角色。这类机器人不仅能够提升工作效率,减少人工干预,还能在复杂或危险环境中完成巡检任务。在这些机器人的设计与制造中,一体化步进伺服电机扮…

jrebel安装使用教程(2022.4.1版本)

本方法适用于jrebel2022.4.1版本,之后的版本不再适用。 1.下载插件 下载地址 2.安装插件 可以通过idea内部安装 也可以将插件解压进idea的安装目录下的plugins。 3.激活 Team URL中填入 https://jrebel.qekang.com/{guid}这里提供两个guid生成地址&#xf…

Redis学习|Redis基础知识、Redis五大数据类型、Redis三种特殊数据类型、Redis事务

Redis基础知识 redis默认有16个数据库,并且这个数量可以在conf配置文件中更改 默认使用的是第0个 可以使用 select 进行切换数据库! key *查看数据库所有的key 清除当前数据库 flushdb 清除全部数据库的内容FLUSHALL 为什么redis是6379!(了解一下即可!) Redis 是…

Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的

文章目录 Elasticsearch聚合查询说明空值率查询DSL Elasticsearch聚合基础知识扩展Elasticsearch聚合概念Script 用法Elasticsearch聚合查询语法指标聚合(Metric Aggregations)桶聚合(Bucket Aggregations)矩阵聚合(Ma…

福州大学 2022~2023 学年第 1 学期考试 A 卷压轴题参考答案

题目: 定义一个抽象类Structure(含有纯虚函数type函数,用以显示当前结构的类型; 含有show函数), 在此基础上派生出Building类, 用来存储一座楼房的层数、房间数以及它的总平方米数。 建立派生 类House&am…

Type-C连接器厂商对检测实验室的要求及重要性解析

Type-C连接器厂商对检测实验室的要求与重要性 Type-C连接器作为一种高速、全功能的接口标准,被广泛应用于各类电子产品中。作为Type-C连接器的制造商,对于产品的质量和性能要求是至关重要的。为了确保产品符合规范并满足市场需求,Type-C连接…

链动2+1模式:解锁用户留存与复购的增长密码

大家好,我是吴军,来自一家业界领先的软件开发公司,专注于为用户打造卓越的产品体验。今天,我想与大家探讨一个在我们产品运营中取得显著成效的策略——链动21模式,以及它是如何助力我们提升用户留存和复购率的。 尽管链…

跟TED演讲学英文:How language shapes the way we think by Lera Boroditsky

How language shapes the way we think Link: https://www.ted.com/talks/lera_boroditsky_how_language_shapes_the_way_we_think? Speaker: Lera Boroditsky Date: November 2017 文章目录 How language shapes the way we thinkIntroductionVocabularySummaryTranscriptA…

6.25世界白癜风日·成都博润白癜风医院获评“成都市医学重点专科”

夏日热情如江潮,勇攀高峰正当时。为激发新质生产力,驱动学术研究引领医院发展,也为了迎接 6.25 世界白癜风日。 6月22日,成都博润白癜风医院隆重举行成都市医学重点专科授牌新闻发布会暨成都市市级继续医学教育项目《难治性白癜风…