【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

内容分享4天前发布
0 0 0

 

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

背景需求:

开学了进入新版,照例和同事交换“班级备课资料”,有出有进。

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

自从学了Python,我对文本资料的格式统一格外关注。8月底就把原始资料进行整理。

通常学期结束的格式清单是这样的。

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

我自己做的班级资料都写上“序号(补0)”这样就完全按照指定顺序打印资料,看的清晰。

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

新学期照例问前任小班老师要一套文本类资料。

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

因为每位老师的资料整理习惯不同,这份资料看上去很乱(文件名不统一,有的名字在前面,有的在后面,有的有日期,有的没有日期,有班级和无班级。)

所以我准备把这套资料也变成序号模式。

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

一、制作新文件名:提取有序号版本的文件名名称,并把班级、教师姓名,日期进行字母替换。



'''
提取正确的期末资料格式顺序的文件名文字
Deepseek,阿夏
20250827

'''
 
 
import os
 
# 读取目录下所有文件和文件夹名称
def list_files_in_directory(directory_path):
    try:
        files = os.listdir(directory_path)
        return files
    except FileNotFoundError:
        print(f"错误:目录 '{directory_path}' 不存在")
        return []
    except PermissionError:
        print(f"错误:没有权限访问目录 '{directory_path}'")
        return []
 
# 使用示例
directory = r'C:Usersjg2yXRZOneDrive桌面20250901小2班班级资料(样式)202409-202506 中2下学期班级资料(1)(周明月)202409-202506 中2下学期班级资料2下学期202502-2025063期末资料2期末资料'
file_names = list_files_in_directory(directory)
 
if not file_names:
    print("没有找到文件或目录不存在")
else:
    print("原始文件列表:")
    print(file_names)
    print("
" + "="*50 + "
")
 
    # 进行替换操作
    classroom = "中(2)班"
    T1 = "夏XX"
    T2 = "辛X"
 
    # 使用列表推导式进行替换(简洁高效)
    processed_names = [
        filename.replace(classroom, '{classroom}')
                .replace(T1, '{T1}')
                .replace(T2, '{T2}')
        for filename in file_names
    ]
 
    # 输出处理后的结果(列表格式)
    print("处理后的文件名称列表:")
    print("[")
    for filename in processed_names:
        print(f"    f'{filename}',")
    print("]")
 
    # 保存到新的列表变量
    new_name_list = processed_names.copy()
 
#     [
#     f'01 {classroom}班级计划(2025.2)完.docx',
#     f'02 {classroom}班级小结(2025.6).docx',
#     f'03 {classroom}幼儿行为观察评价表-{T1}(完).docx',
#     f'03 {classroom}幼儿行为观察评价表-{T2}(完).docx',
#     f'04 {classroom}下学期周计划教案',
#     f'05 {classroom}专题小结(完).docx',
#     f'06 {classroom}游戏活动观察与记录-{T1}(完).docx',
#     f'06 {classroom}游戏活动观察与记录-{T2}(完).docx',
#     f'07 {classroom}自主游戏小结(2025.6).docx',
#     f'08 {classroom}保教反思案例-{T1}.docx',
#     f'08 {classroom}保教反思案例-{T2}.docx',
#     f'10 {classroom}教养笔记-{T1}(2025.6)(完).docx',
#     f'10 {classroom}教养笔记-{T2}(2025.6)完.docx',
#     f'11 中(2)(下)个别化学习操作材料汇总表1 完 .doc',
#     f'~$ {classroom}班级小结(2025.1).docx',
#     f'【2025】档案资料移交清单(教研组)(2024调整版).xls',
#     f'{classroom}班级计划.docx',
#     f'幼儿行为观察评价表(6个空表).docx',
#     f'教养笔记关键词.txt',
#     f'游戏案例的AI关键词 (2).txt',
# ]

需要的的样式,序号,班级,文件内容(教师名字),日期.docx

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

提炼和替换后,字母的“班级、姓名”变成可替换。

列表里,有序号的文件排在前面,没有需要的文件名名称改在后面

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

把这个列表复制出来,保留有序号的。再手动修改日期模版data1=9月,date2=1月,()用来完成后写“完”

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

这就是需要替换的新名字。

 

 

二、处理提供的资料。

1.doc转docx——以前的资料都是doc,现在吸光用docx。这份里面有10个doc

 

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改



'''
参考资料的word格式改成docx,删除doc
Deepseek,阿夏
20250827

'''
import os
import sys
import tempfile
from pathlib import Path
import pythoncom
from win32com import client as wc
 
def ensure_docx_extension(filename):
    """确保文件有正确的.docx扩展名"""
    filename_str = str(filename)
    if filename_str.lower().endswith('.doc'):
        return filename_str[:-4] + '.docx'
    elif not filename_str.lower().endswith('.docx'):
        return filename_str + '.docx'
    return filename_str
 
def convert_doc_to_docx(doc_path, docx_path):
    """使用COM接口将DOC文件转换为DOCX"""
    try:
        # 初始化COM
        pythoncom.CoInitialize()
        
        # 创建Word应用程序对象
        word = wc.Dispatch("Word.Application")
        word.Visible = False
        word.DisplayAlerts = False
        
        # 打开DOC文档
        doc = word.Documents.Open(str(doc_path))
        
        # 确保目标路径有正确的扩展名
        docx_path = ensure_docx_extension(docx_path)
        
        # 保存为DOCX格式
        doc.SaveAs2(str(docx_path), FileFormat=16)  # 16代表docx格式
        
        # 关闭文档和Word应用
        doc.Close()
        word.Quit()
        
        # 释放COM资源
        pythoncom.CoUninitialize()
        
        return True, f"成功转换: {doc_path.name} -> {Path(docx_path).name}"
    except Exception as e:
        return False, f"转换失败 {doc_path.name}: {str(e)}"
 
def main():
    # 设置文件夹路径
    folder_path = r'C:Usersjg2yXRZOneDrive桌面20250901小2班班级资料1 202509小2班上学期资料3期末资料'
    
    # 检查文件夹是否存在
    if not os.path.exists(folder_path):
        print(f"错误:文件夹 '{folder_path}' 不存在")
        return
    
    # 获取文件夹中的所有文件
    all_files = []
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            file_lower = file.lower()
            if file_lower.endswith('.doc') or file_lower.endswith('.docx'):
                all_files.append(Path(root) / file)
    
    if not all_files:
        print("在指定文件夹中没有找到DOC或DOCX文件")
        return
    
    print(f"找到 {len(all_files)} 个Word文档文件")
    print("开始转换...")
    print("-" * 50)
    
    # 转换统计
    success_count = 0
    fail_count = 0
    skip_count = 0
    
    # 处理每个文件
    for file_path in all_files:
        file_ext = file_path.suffix.lower()
        
        if file_ext == '.docx':
            # 已经是DOCX格式,跳过
            print(f"跳过(已是DOCX格式): {file_path.name}")
            skip_count += 1
            continue
        
        if file_ext != '.doc':
            # 不是DOC文件,跳过
            print(f"跳过(不是DOC文件): {file_path.name}")
            skip_count += 1
            continue
        
        # 构建输出路径(与输入文件相同目录)
        output_path = file_path.parent / file_path.stem
        
        # 执行转换
        success, message = convert_doc_to_docx(file_path, output_path)
        
        if success:
            # 删除原始DOC文件
            try:
                os.remove(file_path)
                message += " (已删除原DOC文件)"
            except Exception as e:
                message += f" (但删除原文件失败: {str(e)})"
            
            success_count += 1
        else:
            fail_count += 1
        
        print(message)
    
    # 输出统计结果
    print("-" * 50)
    print("转换完成!")
    print(f"成功: {success_count}, 失败: {fail_count}, 跳过: {skip_count}")
 
if __name__ == "__main__":
    # 检查是否在Windows系统上运行
    if sys.platform != "win32":
        print("错误:此程序需要在Windows系统上运行")
        sys.exit(1)
    
    # 检查必要的库是否已安装
    try:
        from win32com import client
        import pythoncom
    except ImportError as e:
        print(f"错误:缺少必要的库,请安装: {e}")
        print("请运行: pip install pywin32")
        sys.exit(1)
    
    main()

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

10个doc都转成docx了

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

docx文件没有排序,需要核对左侧的内容,手动给右侧添加01、02、03

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

有些表格上学期已经不用了,但为了防止“几年后又要用”,这些模版还是留着。序号靠后。

 

三、替换docx文件名名称

 

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改



'''
参考资料的docx按顺序替换文件名。变成有01.02、03的规范的样式(预览)
Deepseek,阿夏
20250827

'''
import os
from pathlib import Path
 
# 定义模板名称列表(根据实际情况修改这些变量)
classroom = "小1班"  # 班级名称
date1 = "2025.9"    # 日期1
date2 = "2026.1"    # 日期2
T1 = "张老师"       # 教师1
T2 = "李老师"       # 教师2
 
# 模板名称列表
name_templates = [
    f'01_{classroom}_班级计划_{date1}_().docx',
    f'02_{classroom}_班级小结_{date2}_().docx',
    f'03 {classroom} 幼儿行为观察评价表-{T1}_{date2}_().docx',
    f'03 {classroom} 幼儿行为观察评价表-{T2}_{date2}_().docx',
    f'04 {classroom} 下学期周计划教案(文件夹).docx',
    f'05 {classroom} 专题小结_{date2}_().docx',
    f'06 {classroom} 游戏活动观察与记录_{T1}_{date2}_().docx',
    f'06 {classroom} 游戏活动观察与记录-{T2}_{date2}_().docx',
    f'07 {classroom} 自主游戏小结_{date2}_().docx',
    f'08 {classroom} 保教反思案例-{T1}_{date2}_().docx',
    f'08 {classroom} 保教反思案例-{T2}_{date2}_().docx',
    f'09 {classroom} 教养笔记-{T1}_{date2}_().docx',
    f'09 {classroom} 教养笔记-{T2}_{date2}_().docx',
    f'10 {classroom}_(备用)个别化学习操作材料汇总表_{date2}_().docx',
    f'11 {classroom}_(淘汰)幼儿发展预评估_{date2}_().docx',
    f'12 {classroom}_(淘汰)自主游戏观察记录20周{date2}_().docx'  
]
 
def rename_files_by_order(folder_path, templates, dry_run=True):
    """
    按照模板列表的顺序批量重命名文件夹中的文件
    
    参数:
    folder_path: 文件夹路径
    templates: 模板名称列表
    dry_run: 是否只是预览而不实际执行重命名
    """
    # 检查文件夹是否存在
    if not os.path.exists(folder_path):
        print(f"错误:文件夹 '{folder_path}' 不存在")
        return
    
    # 获取文件夹中的所有docx文件
    docx_files = []
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            if file.lower().endswith('.docx'):
                docx_files.append(Path(root) / file)
    
    if not docx_files:
        print("在指定文件夹中没有找到任何docx文件")
        return
    
    # 按文件名排序,确保处理顺序一致
    docx_files.sort()
    
    print(f"找到 {len(docx_files)} 个docx文件")
    print("开始处理文件重命名...")
    print("-" * 60)
    
    # 重命名统计
    renamed_count = 0
    skipped_count = 0
    
    # 检查模板数量是否足够
    if len(docx_files) > len(templates):
        print(f"警告:文件数量({len(docx_files)})多于模板数量({len(templates)})")
        print("多余的文件将不会被重命名")
    
    # 按照顺序处理每个文件
    for i, file_path in enumerate(docx_files):
        if i >= len(templates):
            print(f"跳过(无对应模板): {file_path.name}")
            skipped_count += 1
            continue
            
        original_name = file_path.name
        new_name = templates[i]
        
        # 如果名称没有变化,跳过
        if new_name == original_name:
            print(f"跳过(名称未变化): {original_name}")
            skipped_count += 1
            continue
        
        # 构建新路径
        new_path = file_path.parent / new_name
        
        # 检查新文件名是否已存在
        if new_path.exists():
            print(f"跳过(目标文件已存在): {original_name} -> {new_name}")
            skipped_count += 1
            continue
        
        # 执行重命名或预览
        if dry_run:
            print(f"[预览] {original_name} -> {new_name}")
            renamed_count += 1
        else:
            try:
                os.rename(file_path, new_path)
                print(f"重命名成功: {original_name} -> {new_name}")
                renamed_count += 1
            except Exception as e:
                print(f"重命名失败 {original_name}: {str(e)}")
                skipped_count += 1
    
    # 输出统计结果
    print("-" * 60)
    if dry_run:
        print("预览完成!")
        print(f"可重命名: {renamed_count}, 跳过: {skipped_count}")
        print("
注意:这只是预览模式,要实际执行重命名,请设置 dry_run=False")
    else:
        print("重命名完成!")
        print(f"成功重命名: {renamed_count}, 跳过: {skipped_count}")
 
def main():
    # 设置文件夹路径
    folder_path = r"C:Usersjg2yXRZOneDrive桌面20250901小2班班级资料1 202509小2班上学期资料3期末资料"  # 修改为您的文件夹路径
    
    # 是否只是预览而不实际执行重命名(设置为False以实际执行重命名)
    dry_run = True
    
    # 执行顺序重命名
    rename_files_by_order(folder_path, name_templates, dry_run)
 
if __name__ == "__main__":
    main()

 

预览一下,文件名都一一对应更换了(按索引)

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

实际替换代码



'''
参考资料的docx按顺序替换文件名。变成有01.02、03的规范的样式(实际替换)
Deepseek,阿夏
20250827
'''
 
import os
from pathlib import Path
 
# 定义模板名称列表(根据实际情况修改这些变量)
classroom = "小2班"  # 班级名称
date1 = "2025.9"    # 日期1
date2 = "2026.1"    # 日期2
T1 = "张老师"       # 教师1(根据实际文件名修正)
T2 = "李老师"       # 教师2(根据实际文件名修正)
 
# 修正后的模板名称列表(使用中文括号和正确的日期格式)
name_templates = [
    f'01_{classroom}_班级计划_{date1}().docx',
    f'02_{classroom}_班级小结_{date2}().docx',
    f'03 {classroom} 幼儿行为观察评价表_{T1}_{date2}().docx',
    f'03 {classroom} 幼儿行为观察评价表_{T2}_{date2}().docx',
    f'04 {classroom} 下学期周计划教案(文件夹).docx',
    f'05 {classroom} 专题小结_{date2}().docx',
    f'06 {classroom} 游戏活动观察与记录_{T1}_{date2}().docx',
    f'06 {classroom} 游戏活动观察与记录-{T2}_{date2}().docx',
    f'07 {classroom} 自主游戏小结_{date2}().docx',
    f'08 {classroom} 保教反思案例-{T1}_{date2}().docx',
    f'08 {classroom} 保教反思案例-{T2}_{date2}().docx',
    f'09 {classroom} 教养笔记-{T1}_{date2}().docx',
    f'09 {classroom} 教养笔记-{T2}_{date2}().docx',
    f'10 {classroom}_(备用)个别化学习操作材料汇总表_{date2}().docx',
    f'11 {classroom}_(淘汰)幼儿发展预评估_{date2}().docx',
    f'12 {classroom}_(淘汰)自主游戏观察记录20周{date2}().docx'  
]
 
def rename_files_by_order(folder_path, templates):
    """
    按照模板列表的顺序批量重命名文件夹中的文件
    
    参数:
    folder_path: 文件夹路径
    templates: 模板名称列表
    """
    # 检查文件夹是否存在
    if not os.path.exists(folder_path):
        print(f"错误:文件夹 '{folder_path}' 不存在")
        return
    
    # 获取文件夹中的所有docx文件
    docx_files = []
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            if file.lower().endswith('.docx'):
                docx_files.append(Path(root) / file)
    
    if not docx_files:
        print("在指定文件夹中没有找到任何docx文件")
        return
    
    # 按文件名排序,确保处理顺序一致
    docx_files.sort()
    
    print(f"找到 {len(docx_files)} 个docx文件")
    print("开始处理文件重命名...")
    print("-" * 60)
    
    # 重命名统计
    renamed_count = 0
    skipped_count = 0
    
    # 检查模板数量是否足够
    if len(docx_files) > len(templates):
        print(f"警告:文件数量({len(docx_files)})多于模板数量({len(templates)})")
        print("多余的文件将不会被重命名")
    
    # 按照顺序处理每个文件
    for i, file_path in enumerate(docx_files):
        if i >= len(templates):
            print(f"跳过(无对应模板): {file_path.name}")
            skipped_count += 1
            continue
            
        original_name = file_path.name
        new_name = templates[i]
        
        # 如果名称没有变化,跳过
        if new_name == original_name:
            print(f"跳过(名称未变化): {original_name}")
            skipped_count += 1
            continue
        
        # 构建新路径
        new_path = file_path.parent / new_name
        
        # 检查新文件名是否已存在
        if new_path.exists():
            print(f"跳过(目标文件已存在): {original_name} -> {new_name}")
            skipped_count += 1
            continue
        
        # 执行重命名
        try:
            os.rename(file_path, new_path)
            print(f"重命名成功: {original_name} -> {new_name}")
            renamed_count += 1
        except Exception as e:
            print(f"重命名失败 {original_name}: {str(e)}")
            skipped_count += 1
    
    # 输出统计结果
    print("-" * 60)
    print("重命名完成!")
    print(f"成功重命名: {renamed_count}, 跳过: {skipped_count}")
 
def main():
    # 设置文件夹路径
    folder_path = r"C:Usersjg2yXRZOneDrive桌面20250901小2班班级资料1 202509小2班上学期资料3期末资料"  # 修改为您的文件夹路径
    
    # 执行顺序重命名
    rename_files_by_order(folder_path, name_templates)
 
if __name__ == "__main__":
    main()

 

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

格式非常整齐统一。

 

既然外面的文件名修改了,那么它内部的”年、教师、日期“是不是也可以查找批量修改?

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改



'''
把每个docx里面的年份、班级、教师、日期都改掉(上学期)
Deepseek,阿夏
20250827
'''
 
import os
import win32com.client as win32
from win32com.client import constants
import re
 
# 配置参数
o1 = '2024'
o2 = '2025'
y1 = str(int(o1) + 1)
y2 = str(int(o2) + 1)
 
T1 = '吴XX'
T2 = '周XX'
T3 = '张X'
T4 = '李XX'
g='小'
n1='1'
n2='2'
n3='一'
n4='二'
 
# 定义替换规则
replacements = [
    (f"{o2}.1", f"{y2}.1"),   # 具体日期格式
    (f"{o1}.9", f"{y1}.9"),
    (o2, y2),                 # 一般年份
    (o1, y1),
    (f"{g}({n1})班", f"{g}({n2})班"), # 班级格式
    (f"{g}({n1})班", f"{g}({n2})班"),
    (f"{g}{n3}班", f"{g}{n4}班"),
    (f"{g}{n1}班", f"{g}{n2}班"),
    (f"{g}({n3})班", f"{g}({n4})班"),
    (f"{g}({n3})班", f"{g}({n4})班"),
    (T1, T3),                 # 教师姓名
    (T2, T4)
]
 
def replace_in_all_story_ranges(doc, find_text, replace_text):
    """在文档的所有故事范围(包括页眉、页脚、文本框等)中执行替换,保持格式"""
    for story_range in doc.StoryRanges:
        while story_range:
            try:
                # 使用Word内置的查找替换功能,保持格式
                story_range.Find.Execute(
                    FindText=find_text,
                    ReplaceWith=replace_text,
                    Replace=constants.wdReplaceAll,
                    MatchCase=False,
                    MatchWholeWord=False,
                    MatchWildcards=False
                )
                # 处理链接的故事范围(如连续的页眉页脚)
                story_range = story_range.NextStoryRange
            except Exception as e:
                print(f"替换时出错: {e}")
                break
 
def replace_content_comprehensive():
    path = r'C:Usersjg2yXRZOneDrive桌面20250901小2班班级资料1 202509小2班上学期资料'
    source_folder = path + r"3期末资料"
    target_folder = path + r"3期末资料(改信息)"
    
    if not os.path.exists(target_folder):
        os.makedirs(target_folder)
    
    word = win32.gencache.EnsureDispatch('Word.Application')
    word.Visible = False
    word.DisplayAlerts = False
    
    try:
        for filename in os.listdir(source_folder):
            if filename.endswith('.docx'):
                source_file = os.path.join(source_folder, filename)
                target_file = os.path.join(target_folder, filename)
                
                print(f"正在处理: {filename}")
                
                doc = word.Documents.Open(source_file)
                
                # 按顺序执行所有替换规则
                for find_text, replace_text in replacements:
                    replace_in_all_story_ranges(doc, find_text, replace_text)
                
                doc.SaveAs(target_file)
                doc.Close()
                print(f"已完成: {filename}")
    
    except Exception as e:
        print(f"错误: {e}")
    
    finally:
        word.Quit()
 
def test_replacements():
    """测试替换规则 - 使用全局的replacements列表"""
    print("测试替换规则:")
    for find_text, replace_text in replacements:
        print(f"  {find_text} -> {replace_text}")
 
if __name__ == "__main__":
    # 先显示替换规则
    test_replacements()
    print("
开始处理文档...")
    
    # 处理文档
    replace_content_comprehensive()
    print("所有文档处理完成!")

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

 

 

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

每个文件都打开后,看到班级有不同的表示方法 汉字数字、是否加中英文括号等

 

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

还有2025.1月没有改成2026.1月

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

所以添加替换内容

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

重新生成后

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

特别说明:

如果某个年份始终无法+1,请查看原始文档里面的日期是否写错

 

 

用同样方法做下学期(部分参数修改)

 

1、文件放到(原始)里面备份

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

2、复制一份到(有序号)+doc转docx+手动编号

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

3、复制有序号的到“期末资料”文件夹,Python更改文件名

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

4、修改内部内容,转入(改信息)

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

 

代码优化

我把代码做成可选样式(1=上学期、2=下学期)

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

先输入1,做上学期

0、资料放在“1原始”,包含docx和doc)

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

1、上下学期资料从“1原始”里都改成docx,转入‘’2无序号docx”和“3人工输入序号”两个文件夹中。



'''
参考资料的word格式改成docx,保存到两个文件夹内(全部docx,和手动添加序号的文件夹)
Deepseek,阿夏
20250827

'''
import os
import sys
import shutil
from pathlib import Path
import pythoncom
from win32com import client as wc
 
 
 
def ensure_docx_extension(filename):
    """确保文件有正确的.docx扩展名"""
    filename_str = str(filename)
    if filename_str.lower().endswith('.doc'):
        return filename_str[:-4] + '.docx'
    elif not filename_str.lower().endswith('.docx'):
        return filename_str + '.docx'
    return filename_str
 
def convert_doc_to_docx(doc_path, docx_path):
    """使用COM接口将DOC文件转换为DOCX"""
    try:
        # 初始化COM
        pythoncom.CoInitialize()
        
        # 创建Word应用程序对象
        word = wc.Dispatch("Word.Application")
        word.Visible = False
        word.DisplayAlerts = False
        
        # 打开DOC文档
        doc = word.Documents.Open(str(doc_path))
        
        # 确保目标路径有正确的扩展名
        docx_path = ensure_docx_extension(docx_path)
        
        # 保存为DOCX格式
        doc.SaveAs2(str(docx_path), FileFormat=16)  # 16代表docx格式
        
        # 关闭文档和Word应用
        doc.Close()
        word.Quit()
        
        # 释放COM资源
        pythoncom.CoUninitialize()
        
        return True, f"成功转换: {doc_path.name} -> {Path(docx_path).name}"
    except Exception as e:
        return False, f"转换失败 {doc_path.name}: {str(e)}"
 
def copy_and_convert_files(source_folder, target_folders):
    """复制并转换文件从源文件夹到多个目标文件夹"""
    # 检查源文件夹是否存在
    if not os.path.exists(source_folder):
        print(f"错误:源文件夹 '{source_folder}' 不存在")
        return False, 0, 0, 0
    
    # 确保所有目标文件夹都存在
    for target_folder in target_folders:
        os.makedirs(target_folder, exist_ok=True)
    
    # 获取源文件夹中的所有文件
    all_files = []
    for root, dirs, files in os.walk(source_folder):
        for file in files:
            file_lower = file.lower()
            if file_lower.endswith('.doc') or file_lower.endswith('.docx'):
                all_files.append(Path(root) / file)
    
    if not all_files:
        print("在源文件夹中没有找到DOC或DOCX文件")
        return False, 0, 0, 0
    
    print(f"找到 {len(all_files)} 个Word文档文件")
    print("开始转换并复制到多个文件夹...")
    print("-" * 60)
    
    # 转换统计
    success_count = 0
    fail_count = 0
    skip_count = 0
    
    # 处理每个文件
    for file_path in all_files:
        file_ext = file_path.suffix.lower()
        
        # 处理每个目标文件夹
        for i, target_folder in enumerate(target_folders):
            # 构建目标文件路径
            relative_path = file_path.relative_to(source_folder)
            target_file_path = Path(target_folder) / relative_path
            
            # 确保目标目录存在
            os.makedirs(target_file_path.parent, exist_ok=True)
            
            if file_ext == '.docx':
                # 已经是DOCX格式,直接复制
                try:
                    shutil.copy2(file_path, target_file_path)
                    if i == 0:  # 只在第一次复制时打印
                        print(f"复制DOCX文件: {file_path.name}")
                    success_count += 1 if i == 0 else 0
                except Exception as e:
                    print(f"复制失败 {file_path.name} 到 {target_folder}: {str(e)}")
                    fail_count += 1 if i == 0 else 0
            
            elif file_ext == '.doc':
                # DOC文件需要转换 - 每个文件夹都独立转换
                success, message = convert_doc_to_docx(file_path, target_file_path)
                if i == 0:  # 只在第一次转换时统计和打印
                    if success:
                        success_count += 1
                    else:
                        fail_count += 1
                    print(message)
            
            else:
                # 其他文件类型,跳过
                if i == 0:  # 只在第一次处理时打印
                    print(f"跳过(不是DOC/DOCX文件): {file_path.name}")
                    skip_count += 1
    
    return True, success_count, fail_count, skip_count
 
def main():
    # 设置文件夹路径
    if q == 1:
        base_path = r'C:Usersjg2yXRZOneDrive桌面20250901小2班班级资料1 202509小2班上学期资料'
        source_folder = os.path.join(base_path, '03期末资料(1原始)')
        target_folder1 = os.path.join(base_path, '03期末资料(2无序号docx)')
        target_folder2 = os.path.join(base_path, '03期末资料(3人工调整序号)')
    else:
        base_path = r'C:Usersjg2yXRZOneDrive桌面20250901小2班班级资料2 202602小2班下学期资料'
        source_folder = os.path.join(base_path, '03期末资料(1原始)')
        target_folder1 = os.path.join(base_path, '03期末资料(2无序号docx)')
        target_folder2 = os.path.join(base_path, '03期末资料(3人工调整序号)')
    
    # 目标文件夹列表
    target_folders = [target_folder1, target_folder2]
    
    print(f"源文件夹: {source_folder}")
    print(f"目标文件夹1(无序号): {target_folder1}")
    print(f"目标文件夹2(有序号): {target_folder2}")
    print("-" * 60)
    
    # 执行文件复制和转换
    success, success_count, fail_count, skip_count = copy_and_convert_files(source_folder, target_folders)
    
    if success:
        # 输出统计结果
        print("-" * 60)
        print("转换完成!")
        print(f"成功处理: {success_count} 个文件")
        print(f"失败: {fail_count} 个文件")
        print(f"跳过: {skip_count} 个文件")
        print(f"
文件已保存到以下两个文件夹:")
        print(f"1. {target_folder1} - 无序号DOCX文件")
        print(f"2. {target_folder2} - 用于人工调整序号")
 
if __name__ == "__main__":
    # 检查是否在Windows系统上运行
 
    q=int(input('1上学期、2下学期(输入1或2)
'))
    
    if sys.platform != "win32":
        print("错误:此程序需要在Windows系统上运行")
        sys.exit(1)
    
    # 检查必要的库是否已安装
    try:
        from win32com import client
        import pythoncom
    except ImportError as e:
        print(f"错误:缺少必要的库,请安装: {e}")
        print("请运行: pip install pywin32")
        sys.exit(1)
    
    main()

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

全部是的docx,但是没有排序

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

人工调整文件夹需要,手动修改编号(修改后,最后复制一份)防止再次生成覆盖掉,又要手动填好

因为有手动改编号的内容,非常繁琐,所以最好每个内容都保存在不一样的文件夹内。以免资料遗失。

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

手动输入编号

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

复制一份

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

 

修改“3人工调整序号”文件夹里文件名。根据索引01配01的新文件名。把新文件放在“4改文件名’

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改



'''
参考资料的docx按顺序替换文件名。变成有01.02、03的规范的样式(实际替换)
Deepseek,阿夏
20250827
'''
'''
参考资料的docx按顺序替换文件名。变成有01.02、03的规范的样式(实际替换)
Deepseek,阿夏
20250827
'''
 
import os
import shutil
from pathlib import Path
 
q = int(input('1上学期、2下学期(输入1或2)
'))
 
# 定义模板名称列表(根据实际情况修改这些变量)
classroom = "小2班"  # 班级名称
if q == 1:
    date1 = "2025.9"    # 日期1
    date2 = "2026.1"    # 日期2
else:
    date1 = "2026.2"    # 日期1
    date2 = "2026.6"    # 日期2
 
T1 = "教师1姓名"       # 教师1(根据实际文件名修正)
T2 = "教师2姓名"       # 教师2(根据实际文件名修正)
 
# 修正后的模板名称列表(使用中文括号和正确的日期格式)
name_templates = [
    f'01_{classroom}_班级计划_{date1}().docx',
    f'02_{classroom}_班级小结_{date2}().docx',
    f'03 {classroom} 幼儿行为观察评价表_{T1}_{date2}().docx',
    f'03 {classroom} 幼儿行为观察评价表_{T2}_{date2}().docx',
    f'04 {classroom} 下学期周计划教案(文件夹).docx',
    f'05 {classroom} 专题小结_{date2}().docx',
    f'06 {classroom} 游戏活动观察与记录_{T1}_{date2}().docx',
    f'06 {classroom} 游戏活动观察与记录-{T2}_{date2}().docx',
    f'07 {classroom} 自主游戏小结_{date2}().docx',
    f'08 {classroom} 保教反思案例-{T1}_{date2}().docx',
    f'08 {classroom} 保教反思案例-{T2}_{date2}().docx',
    f'09 {classroom} 教养笔记-{T1}_{date2}().docx',
    f'09 {classroom} 教养笔记-{T2}_{date2}().docx',
    f'10 {classroom}_(备用)个别化学习操作材料汇总表_{date2}().docx',
    f'11 {classroom}_(淘汰)幼儿发展预评估_{date2}().docx',
    f'12 {classroom}_(淘汰)自主游戏观察记录20周{date2}().docx'  
]
 
def copy_files_to_target_folder(source_folder, target_folder):
    """将源文件夹中的文件复制到目标文件夹"""
    # 检查源文件夹是否存在
    if not os.path.exists(source_folder):
        print(f"错误:源文件夹 '{source_folder}' 不存在")
        return False
    
    # 确保目标文件夹存在
    os.makedirs(target_folder, exist_ok=True)
    
    # 清空目标文件夹(如果已存在)
    for file in os.listdir(target_folder):
        file_path = os.path.join(target_folder, file)
        try:
            if os.path.isfile(file_path):
                os.unlink(file_path)
        except Exception as e:
            print(f"删除文件失败 {file_path}: {e}")
    
    # 复制所有docx文件到目标文件夹
    docx_files = []
    for root, dirs, files in os.walk(source_folder):
        for file in files:
            if file.lower().endswith('.docx'):
                source_path = Path(root) / file
                target_path = Path(target_folder) / file
                shutil.copy2(source_path, target_path)
                docx_files.append(target_path)
    
    print(f"已复制 {len(docx_files)} 个文件到目标文件夹")
    return True
 
def rename_files_by_order(folder_path, templates):
    """
    按照模板列表的顺序批量重命名文件夹中的文件
    
    参数:
    folder_path: 文件夹路径
    templates: 模板名称列表
    """
    # 检查文件夹是否存在
    if not os.path.exists(folder_path):
        print(f"错误:文件夹 '{folder_path}' 不存在")
        return
    
    # 获取文件夹中的所有docx文件
    docx_files = []
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            if file.lower().endswith('.docx'):
                docx_files.append(Path(root) / file)
    
    if not docx_files:
        print("在指定文件夹中没有找到任何docx文件")
        return
    
    # 按文件名排序,确保处理顺序一致
    docx_files.sort()
    
    print(f"找到 {len(docx_files)} 个docx文件")
    print("开始处理文件重命名...")
    print("-" * 60)
    
    # 重命名统计
    renamed_count = 0
    skipped_count = 0
    
    # 检查模板数量是否足够
    if len(docx_files) > len(templates):
        print(f"警告:文件数量({len(docx_files)})多于模板数量({len(templates)})")
        print("多余的文件将不会被重命名")
    
    # 按照顺序处理每个文件
    for i, file_path in enumerate(docx_files):
        if i >= len(templates):
            print(f"跳过(无对应模板): {file_path.name}")
            skipped_count += 1
            continue
            
        original_name = file_path.name
        new_name = templates[i]
        
        # 如果名称没有变化,跳过
        if new_name == original_name:
            print(f"跳过(名称未变化): {original_name}")
            skipped_count += 1
            continue
        
        # 构建新路径
        new_path = file_path.parent / new_name
        
        # 检查新文件名是否已存在
        if new_path.exists():
            print(f"跳过(目标文件已存在): {original_name} -> {new_name}")
            skipped_count += 1
            continue
        
        # 执行重命名
        try:
            os.rename(file_path, new_path)
            print(f"重命名成功: {original_name} -> {new_name}")
            renamed_count += 1
        except Exception as e:
            print(f"重命名失败 {original_name}: {str(e)}")
            skipped_count += 1
    
    # 输出统计结果
    print("-" * 60)
    print("重命名完成!")
    print(f"成功重命名: {renamed_count}, 跳过: {skipped_count}")
 
def main():
    # 设置文件夹路径
    if q == 1:
        path = r"C:Usersjg2yXRZOneDrive桌面20250901小2班班级资料1 202509小2班上学期资料"
        source_folder = path + r"3期末资料(3人工调整序号)"
        target_folder = path + r"3期末资料(4改文件名)"
    else:
        path = r"C:Usersjg2yXRZOneDrive桌面20250901小2班班级资料2 202602小2班下学期资料"
        source_folder = path + r"3期末资料(3人工调整序号)"
        target_folder = path + r"3期末资料(4改文件名)"
    
    # 确保目标文件夹存在
    os.makedirs(target_folder, exist_ok=True)
    
    # 首先将文件从3文件夹复制到4文件夹
    print(f"正在从 '{source_folder}' 复制文件到 '{target_folder}'...")
    if not copy_files_to_target_folder(source_folder, target_folder):
        return
    
    print("-" * 60)
    
    # 然后在4文件夹中执行重命名操作
    rename_files_by_order(target_folder, name_templates)
 
if __name__ == "__main__":
    main()

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

 

五、文件名都改了,最后就是内部信息更改



'''
把每个docx里面的年份、班级、教师、日期都改掉(上下学期)
Deepseek,阿夏
20250827
'''
 
 
import os
import win32com.client as win32
from win32com.client import constants
import re
 
# 配置参数
o1 = '2024'
o2 = '2025'
y1 = str(int(o1) + 1)
y2 = str(int(o2) + 1)
 
T1 = '源文件里教师1姓名'
T2 = '源文件里教师2姓名'
T3 = '本班教师1姓名'
T4 = '本班教师2姓名'
g='小'
n1='1'
n2='2'
n3='一'
n4='二'
 
# 定义替换规则
replacements = [
    (f"{o2}.1", f"{y2}.1"),   # 具体日期格式
    (f"{o1}.9", f"{y1}.9"),
    (o2, y2),                 # 一般年份
    (o1, y1),
    (f"{g}({n1})班", f"{g}({n2})班"), # 班级格式
    (f"{g}({n1})班", f"{g}({n2})班"),
    (f"{g}{n3}班", f"{g}{n4}班"),
    (f"{g}{n1}班", f"{g}{n2}班"),
    (f"{g}({n3})班", f"{g}({n4})班"),
    (f"{g}({n3})班", f"{g}({n4})班"),
    (T1, T3),                 # 教师姓名
    (T2, T4)
]
 
def replace_in_all_story_ranges(doc, find_text, replace_text):
    """在文档的所有故事范围(包括页眉、页脚、文本框等)中执行替换,保持格式"""
    for story_range in doc.StoryRanges:
        while story_range:
            try:
                # 使用Word内置的查找替换功能,保持格式
                story_range.Find.Execute(
                    FindText=find_text,
                    ReplaceWith=replace_text,
                    Replace=constants.wdReplaceAll,
                    MatchCase=False,
                    MatchWholeWord=False,
                    MatchWildcards=False
                )
                # 处理链接的故事范围(如连续的页眉页脚)
                story_range = story_range.NextStoryRange
            except Exception as e:
                print(f"替换时出错: {e}")
                break
 
def replace_content_comprehensive():
    if q==1:
        path = r'C:Usersjg2yXRZOneDrive桌面20250901小2班班级资料1 202509小2班上学期资料'
    else:
        path = r'C:Usersjg2yXRZOneDrive桌面20250901小2班班级资料2 202602小2班下学期资料'
    
    source_folder = path + r"3期末资料(4改文件名)"
    target_folder = path + r"3期末资料(5改内部信息)"
    
    if not os.path.exists(target_folder):
        os.makedirs(target_folder)
    
    word = win32.gencache.EnsureDispatch('Word.Application')
    word.Visible = False
    word.DisplayAlerts = False
    
    try:
        for filename in os.listdir(source_folder):
            if filename.endswith('.docx'):
                source_file = os.path.join(source_folder, filename)
                target_file = os.path.join(target_folder, filename)
                
                print(f"正在处理: {filename}")
                
                doc = word.Documents.Open(source_file)
                
                # 按顺序执行所有替换规则
                for find_text, replace_text in replacements:
                    replace_in_all_story_ranges(doc, find_text, replace_text)
                
                doc.SaveAs(target_file)
                doc.Close()
                print(f"已完成: {filename}")
    
    except Exception as e:
        print(f"错误: {e}")
    
    finally:
        word.Quit()
 
def test_replacements():
    """测试替换规则 - 使用全局的replacements列表"""
    print("测试替换规则:")
    for find_text, replace_text in replacements:
        print(f"  {find_text} -> {replace_text}")
 
if __name__ == "__main__":
 
    q=int(input('1上学期、2下学期(输入1或2)
'))
    # 先显示替换规则
    test_replacements()
    print("
开始处理文档...")
    
    # 处理文档
    replace_content_comprehensive()
    print("所有文档处理完成!")

 

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

里面的日期,都从2025变2026、2024变2025

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

可以把资料复制到03期末资料里备用

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

同样方式做下学期(输入数字2)

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

 

 

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

把03-5改内部信息里面的docx复制到03期末资料

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

其他03都删除。

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

改过基础信息的班级资料就做好了

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

【办公类-90-04】20250827班级备课资料的文件统一文件名序号&内部基础信息(年、班级、教师、年月)更改

结语:

总体来说,班级资料的核心内容大同小异,修改里面内容时,就不会出现忘记修改人名、班级、日期的情况了。由于年年有模版格式的调整(专家指导),领导一句话,资料就要批量改死,所以我一直致力研究用编程提高“本文制作”的效率。

开学在即,年年岁岁花相似,岁岁年年人亦同,入职十几年了,早没有职初的新鲜期,也真切感受每一批孩子都有月龄差异、能力差异,兴趣差异、性别差异——常常感叹:这个孩子就是我曾经带过的那个孩子。

而职业最大的愿望依旧是最低的目标——安全平安!因为看护孩子安全就已经耗费了所有的心力,所以一些不那么重要的文本任务跟需要速度和效率去早日完成。把更多时间用在“看孩子安全”和“发现幼儿表现”上,才是一线教师最核心的需求。

 

 

© 版权声明

相关文章

暂无评论

none
暂无评论...