返回目录

第1节:os模块

Python 的 os 模块就像是你的“物业管理员”或者是“私人管家”,不管你想查谁的户口(路径),还是想盖房、拆房(创建、删除目录),它都能帮你搞定。

咱们这就来一场说走就走的“文件探险”,代码管够,废话不多说,直接上车!

1. 路径操作:别让你的文件迷路

os.path 是这个模块里的“GPS导航仪”。它可以帮你处理不同系统(Windows 或 Linux)那让人头秃的斜杠差异。
import os
# 1. 获取当前你家(工作目录)在哪
current_home = os.getcwd()
print(f"🏠 当前物业位置:{current_home}")
# 2. 强行搭讪:拼接路径 (os.path.join)
# 别再用 '+' 拼路径了,万一斜杠反了会出事的!
folder = "我的秘密基地"
file = "藏宝图.txt"
path = os.path.join(current_home, folder, file)
print(f"📍 宝藏地址:{path}")
# 3. 拆散这对新人 (os.path.split)
# 把路径拆成:文件夹路径 + 文件名
directory, filename = os.path.split(path)
print(f"📂 它的宿舍:{directory}\n📄 它的名字:{filename}")
# 4. 只想要个后缀 (os.path.splitext)
# 看看它是正经文件还是病毒
name, extension = os.path.splitext(file)
print(f"🆔 文件名:{name}, 🏷️ 格式:{extension}")

2. 判断:它是真实存在的吗?

在对文件下手之前,先确认它是不是幻觉,否则 Python 报错的脾气可不好。

# 1. 它是真实存在的吗? (os.path.exists)
is_real = os.path.exists("前任的照片.jpg")
if not is_real:
    print("💔 早就删干净了,别看了。")
    # 2. 它是“人”还是“房子”? (os.path.isfile / isdir)
    if os.path.isfile(path):
        print("📄 报告!这是一个正经的文件。")
    elif os.path.isdir(current_home):
        print("🏢 报告!这是一个宽敞的目录(文件夹)。")

3. 批量获取列表:查看你的“后宫”

如果你想知道一个文件夹里到底塞了多少奇奇怪怪的东西,这一招必学。

# 1. 粗略查看 (os.listdir)
# 只看当前层,不往深处挖
stuff = os.listdir(os.getcwd())
print(f"👀 看看这层都有啥:{stuff}")
# 2. 深度挖掘 (os.walk) —— 这是个“神技”
# 它会像土拨鼠一样,把所有子文件夹和文件都翻出来
print("🕳️ 开始全城搜捕...")
for root, dirs, files in os.walk("."):
    for name in files:
        print(f"🔍 躲在 {root} 里的文件:{name}")

4. 盖房与拆迁:目录创建与删除

这是最刺激的部分,请谨慎操作,毕竟“误删”是每个程序员的噩梦。

# 1. 盖一间单间 (os.mkdir)
# ⚠️ 注意:如果父文件夹不存在,它会罢工
try:
    os.mkdir("新出的瓜")
    print("🍉 瓜棚搭好了。")
except FileExistsError:
    print("🙄 瓜棚早就有了,别盖了。")
    # 2. 盖一座摩天大楼 (os.makedirs)
    # 哪怕中间的文件夹都没有,它也会自动帮你全部建好(非常给力!)
    os.makedirs("2024/计划/又要/咕咕咕", exist_ok=True)
    print("🏢 连环套娃文件夹建好了。")
    # 3. 拆迁 (os.rmdir / os.remove)
    # 注意:os.rmdir 只能删空文件夹,里面有东西它不敢拆
    try:
        os.rmdir("新出的瓜")
        print("🧹 瓜吃完了,棚子拆了。")
    except OSError:
        print("😱 棚子里还有东西,拆不动!")

总结小抄表

功能命令备注
拿当前位置os.getcwd()“我在哪?”
拼路径os.path.join()跨系统自动处理斜杠,稳!
查户口os.path.exists()看看东西还在不在。
大扫除os.walk()文件夹里的所有东西无所遁形。
建房os.makedirs()建议带上 exist_ok=True,省心。

温馨提示:在用 os 模块进行大规模删除操作前,请务必对着镜子问问自己:“我备份了吗?” 祝你玩得开心!

第2节:shutil模块

手动拖拽文件夹是种“体力劳动”,准备让 Python 替你当这个“文件搬运工”了。

shutil(Shell Utilities)模块就是 Python 里的那个超级管家。它不仅能搬东西,还能打包、拆包,甚至能帮你毁尸灭迹(误)。

准备好了吗?我们要开始对你的硬盘“动手动脚”了。

1. 复制:影分身之术

复制文件或目录。shutil 有好几种姿势,取决于你想要多“还原”。

场景:把你的“学习资料”备份一份

import shutil
import os
# 1. shutil.copy(src, dst): 复制内容和权限,但不包括元数据(比如创建时间)
# 就像克隆了一个你,但这个克隆人没有你的记忆。
shutil.copy('学习资料.mp4', '备份/学习资料_副本.mp4')
# 2. shutil.copy2(src, dst): 连同元数据一起复制(最推荐,最像原版)
# 连你昨天熬夜留下的黑眼圈(创建时间)都一模一样。
shutil.copy2('秘密笔记.txt', '保险箱/秘密笔记_备份.txt')
# 3. 整个文件夹搬走:shutil.copytree
# 哪怕文件夹里有十八层地狱(子文件夹),它也能全给你搬过去。
if not os.path.exists('远程服务器/重要项目'):
    shutil.copytree('本地项目', '远程服务器/重要项目')
    print("全家桶搬迁完毕!")

2. 移动与重命名:瞬移大法

shutil.move 是最常用的功能。它不仅能换地方,还能顺便改名。

场景:把前任的照片丢进回收站,顺便改名叫“那个谁”

# 如果目标路径和源路径在同一个磁盘,这就是重命名;
# 如果不在,它会先复制再删除原文件,深藏功与名。
shutil.move('前任/美照.jpg', '垃圾桶/那个谁.jpg')
print("瞬间移动完成,眼不见心不烦。")

3. 删除:毁尸灭迹(慎用!)

os.remove 只能删单个文件,而 shutil.rmtree 能直接抹掉整个文件夹。

场景:老板说项目黄了,让你删掉所有代码

# 警告:这个操作不进回收站,直接从物理层面抹除!
# 请在按下回车前深呼吸三次。
try:
    shutil.rmtree('倒霉项目_v1.0')
    print("报告老板,证据……啊不,项目已销毁!")
except FileNotFoundError:
    print("早删过了,别催了。")

4. 自动分类归档:乱室佳人变洁癖大师

这是 shutil 结合 os 的高级玩法。我们可以根据文件后缀名,把乱糟糟的桌面自动分好类。

场景:拯救你那堆满了 500 个文件的桌面

import os
import shutil
def tidy_up_my_mess(folder_path):
    # 定义分类规则:格式 -> 文件夹名
    rules = {
    '图片': ['.jpg', '.png', '.gif', '.jpeg'],
    '视频': ['.mp4', '.mkv', '.mov'],
    '文档': ['.pdf', '.docx', '.txt', '.xlsx'],
    '压缩包': ['.zip', '.rar', '.7z']
    }
    for file in os.listdir(folder_path):
        # 别把自己给搬走了
        file_path = os.path.join(folder_path, file)
        if os.path.isdir(file_path):
            continue
        # 获取后缀名

_, ext = os.path.splitext(file)

# 开始匹配规则
moved = False
for folder_name, extensions in rules.items():
    if ext.lower() in extensions:
        target_dir = os.path.join(folder_path, folder_name)
        # 文件夹不在就建一个
        os.makedirs(target_dir, exist_ok=True)
        # 移驾!
        shutil.move(file_path, os.path.join(target_dir, file))
        print(f"已将 {file} 请入 {folder_name} 宫。")
        moved = True
        break
    if not moved:
        print(f"{file} 身份不明,暂留原地。")
        # 运行它,你的桌面瞬间变干净!
        # tidy_up_my_mess('C:/Users/Administrator/Desktop')

5. 压缩与解压:全家桶打包

以前你还得下个 WinRAR,现在 Python 一行代码搞定。

场景:要把一堆代码发给甲方,但不想让他看清目录结构

# 1. 压缩:make_archive(文件名, 格式, 路径)
# 格式支持 'zip', 'tar', 'gztar' 等
shutil.make_archive('交付件_死也不改版', 'zip', '项目源码/')
# 2. 解压:unpack_archive(压缩包路径, 解压到哪)
shutil.unpack_archive('甲方给的需求.zip', '需求文档/')
print("打包解压一条龙,轻松愉快。")

总结:超级管家的“避坑”指南

函数功能相当于备注
copy2复制文件完美克隆连时间戳都留着,最建议用
copytree复制文件夹搬家目标文件夹必须不存在,否则报错
move移动/重命名瞬移/整容跨磁盘时速度较慢
rmtree删除文件夹降维打击极其危险,没有后悔药
make_archive压缩打包快递简单粗暴好用

你学会了吗?

第3节:python-docx基础:

准备好把那些枯燥的 .docx 文档变成你的代码“玩物”了。没问题,咱们今天就用 python-docx 搞定这些文档。

先确认你已经安装了这个库,如果没有,赶紧去终端(Terminal)执行:

pip install python-docx

1. 文档的“开天辟地”:创建与打开

就像写日记一样,你得先找本本。Document() 就是你的新本子。

from docx import Document
# 情况 A:凭空变出一个新文档(就像变魔术,此时还在内存里)
doc = Document()
# 情况 B:打开一个现成的文档(像是在垃圾堆里翻到前任的情书)
# doc = Document('ex_girlfriend_letter.docx')
print("文档已就绪,准备开始整活!")

2. 段落(Paragraph):文档的灵魂肉体

段落是 Word 的基础。我们可以写一段话,也可以往里面疯狂加戏。

# 添加一个普通段落
p1 = doc.add_paragraph("这是一段正经的文字。")
# 想在一段话里玩花活?用 add_run()
# run 就像是段落里的“变色龙”,可以单独改格式
p2 = doc.add_paragraph("我是个段落,但我里面的词有")
run = p2.add_run(" 性格 ")
run.bold = True        # 加粗:我很强壮!
run.italic = True      # 倾斜:我很优雅~
p2.add_run(",还有个")
p2.add_run("红色高亮").font.name = 'Arial' # 换个字体
#

3. 标题(Heading):撑起门面的大梁

标题有级别,level=0 是文档总标题,1-9 是各级小标题。

doc.add_heading('震惊!Python 竟然能自动写文档', level=0) # 最大标题
doc.add_heading('第一章:如何优雅地摸鱼', level=1)
doc.add_heading('1.1 摸鱼的哲学', level=2)

4. 表格(Table):让数据排排坐

表格稍微复杂点,你需要指定行(Row)和列(Col)。

# 创建一个 3行 3列 的表格
table = doc.add_table(rows=3, cols=3)
table.style = 'Table Grid' # 加上边框,不然看不见
# 获取第一行并填入表头
hdr_cells = table.rows[0].cells

hdr_cells[0].text = '姓名'

hdr_cells[1].text = '战斗力'

hdr_cells[2].text = '口头禅'

# 填入数据
row_cells = table.rows[1].cells
row_cells[0].text = '程序员 A'
row_cells[1].text = '5'
row_cells[2].text = '我本地运行没问题啊!'
# 循环读取表格内容(看看刚才写了啥)
for row in table.rows:
    for cell in row.cells:
        print(f"格子里写着:{cell.text}")

5. 读取内容:反向侦查

如果你是想读别人的文档,方法也很简单。

# 读一段
for i, para in enumerate(doc.paragraphs):
    print(f"第 {i} 段的内容是: {para.text}")
    # 读表格(双重循环,像剥洋葱)
    for table in doc.tables:
        for row in table.rows:
            row_data = [cell.text for cell in row.cells]
            print("发现一行数据:", " | ".join(row_data))

6. 毁尸灭迹(保存文档)

如果你不保存,刚才的一切就像你昨晚吹的牛一样,醒来全没了。

doc.save('我的自动化杰作.docx')
print("保存成功!快去文件夹里膜拜它吧。")
💡 核心知识点小结(快速查阅表)
功能方法备注
创建/打开Document('path.docx')留空则创建新的
加标题add_heading('文本', level=1)Level 0 是大标题
加段落add_paragraph('文本')返回一个 Paragraph 对象
改样式run = p.add_run('文本')只有 Run 能改粗体/斜体/字体
加表格add_table(rows, cols)记得设 style='Table Grid'

避坑指南:

单位问题:如果你要设置图片大小或页边距,记得导入 from docx.shared import Inches 或 Pt。

样式名称:table.style = 'Table Grid' 是常用的,如果不写这个,你的表格在 Word 里看起来就是“裸奔”的(没有边框线)。

第4节:模板替换

在 Python 的世界里,批量把变量塞进模板就像是在玩“填词游戏”。不管你是要给前任发群发道歉信,还是给债主们发催款通知,掌握这几种姿势能让你事半功倍。

以下是 Python 中模板替换的“全家桶”指南:

1. 远古时代的遗产:% 运算符

这是最老派的做法,像极了还在用诺基亚的年代。虽然老,但在一些老旧代码库里你还能见到它。

特点:语法有点怪,容易写错位置。

搞笑场景:发错工资时的紧急通知。

# 核心语法: "模板" % (变量1, 变量2)
template = "尊敬的 %s:由于财务小王摸鱼,您的本月工资实发 %.2f 元,剩下的以 %d 个鸡蛋抵扣。"
# 批量填充
data = [("张三", 50.5, 100), ("李四", 0.01, 999)]
for name, money, eggs in data:
    print(template % (name, money, eggs))

2. 优雅的进阶:.format() 方法

这是 Python 2.6 引入的,目前依然非常主流。它比 % 灵活得多,支持按顺序、按名称、甚至按对象的属性填充。

特点:大括号 {} 是灵魂,支持“一词多用”。

搞笑场景:渣男/渣女的群发情人节模版。

# 1. 按顺序填
print("亲爱的{},其实我最爱的是{}。".format("小芳", "你"))
# 2. 按编号填(防止记错名字)
template = "亲爱的 {0}:其实我最爱的是 {0},{1} 只是我的普通朋友。"
print(template.format("翠花", "二狗子"))
# 3. 按关键字填(最推荐,不容易乱)
template = "【外卖提醒】{name}你好!由于你的外卖被{villain}偷走了,我们将赔偿你一张{discount}折券。"
print(template.format(name="大壮", villain="隔壁老王", discount=0.5))

3. 现代艺术:F-strings (变色龙模式)

Python 3.6+ 的神作。直接把变量写在大括号里,代码看起来就像魔法一样。

特点:速度最快,可读性最高,支持在里面写简单的逻辑。

搞笑场景:修仙选手的个人简介。

level = 99
name = "铁柱"
is_rich = False
# 直接在字符串里玩花样
intro = f"我是{name},目前练气第{level}层。{'家产万贯' if is_rich else '穷得叮当响'}。"
print(intro)
# 甚至可以处理日期和金额格式化
from datetime import datetime
today = datetime.now()
balance = 1234567.89
print(f"日期:{today:%Y年%m月%d日},您的账户余额:¥{balance:,.2f}")
# 输出:日期:2026年04月29日,您的账户余额:¥1,234,567.89

4. 安全第一:string.Template

如果你要处理的用户输入(比如网页表格填进来的东西),用上面几种可能会有安全风险(格式字符串攻击)。这时候得请出“安全管家”。

特点:使用 $ 符号,语法非常类似 Shell 脚本。

搞笑场景:匿名勒索信(误)。

from string import Template
# 定义模版,用 $ 标识占位符
s = Template("由于你偷了 ${target} 的 ${item},请于 ${time} 前自首!")
# 批量替换
mapping = {
"target": "食堂大妈",
"item": "不锈钢大勺",
"time": "下班前"
}
print(s.substitute(mapping))

5. 暴力流:.replace()

如果你完全不想记语法,只想简单粗暴地替换,那就直接用字符串自带的方法。

特点:简单但不智能,容易误伤(比如把“张三”换了,结果“张三丰”也变了)。

text = "你好 [NAME],你的验证码是 [CODE]。"
print(text.replace("[NAME]", "旺财").replace("[CODE]", "9527"))

6. 终极奥义:Jinja2 (专业级)

如果你要生成的东西非常复杂(比如一整个 HTML 页面或者长篇报告),上面的工具就捉襟见肘了。Jinja2 是 Python 最火的模版引擎。

特点:支持循环(if/for)、继承,功能强到离谱。

场景:自动生成公司的“甩锅公告”。

# 需要 pip install jinja2
from jinja2 import Template
j2_template = Template("""

致全体员工:

关于本次 {{ project_name }} 的失败,原因如下:

{% for reason in reasons %}

- {{ loop.index }}. {{ reason }}

{% endfor %}

结论:全是 {{ scapegoat }} 的错!

""")

data = {

"project_name": "拯救地球计划",

"reasons": ["PPT做得太丑", "老板昨晚失眠", "水星逆行"],

"scapegoat": "实习生小明"

}

print(j2_template.render(data))

总结:该选哪一个?

方案推荐指数适用场景
F-strings⭐⭐⭐⭐⭐首选! 日常开发、日志、简单替换。
.format()⭐⭐⭐⭐需要复用占位符,或在 Python 3.6 以下版本。
string.Template⭐⭐⭐处理不信任的用户输入。
Jinja2⭐⭐⭐⭐生成复杂的 HTML、邮件模板或配置文件。
% 运算符除非你在修文物的代码。

你要用这些模版去“批量填充”什么样的搞笑内容?我可以帮你写个更具体的循环逻辑!

第5节:批量生成文档

要把 Excel 里的“花名册”变成 Word 里的“委任状”或“检讨书”,这种活儿要是手动做,简直是程序员的职业耻辱。

在 Python 界,处理这种任务的“黄金搭档”通常是 pandas(负责读 Excel)和 python-docx(负责写 Word)。

准备工作:

pip install pandas openpyxl python-docx

1. 基础版:简单粗暴的“克隆术”

场景: 公司的年会抽奖,你要给中奖的同事发通知。Excel 里只有“姓名”和“奖品”。

import pandas as pd
from docx import Document
# 假设 excel 内容:姓名: [张三, 李四], 奖品: [特等奖(脸盆), 一等奖(袜子)]
df = pd.read_excel('awards.xlsx')
for index, row in df.iterrows():
    doc = Document()
    doc.add_heading('中奖喜报', 0)
    # 这里的 row['姓名'] 就像是从 Excel 抽屉里拿东西
    p = doc.add_paragraph(f"亲爱的 {row['姓名']} 同志:")
    p.add_run(f"\n恭喜你抽中了 {row['奖品']}!")
    doc.add_paragraph("请务必在下班前领走,否则奖品将被老板没收。")
    # 文件名也要个性化,不然全叫 "新建文档" 就乱套了
    doc.save(f"通知_{row['姓名']}.docx")
    print("大功告成!全公司都脱贫致富了。")

2. 进阶版:模版替换法(最推荐)

场景: 你有一份排版精美(五彩斑斓)的 Word 模板,里面有各种加粗、下划线。你不想用代码写样式,只想把 {{name}} 换成真名。

这里推荐一个神级库:docxtpl(它是 python-docx 的华丽外壳)。

pip install docxtpl
from docxtpl import DocxTemplate
import pandas as pd
# 1. 加载那个你改了 18 遍的模版
tpl = DocxTemplate("分手信模板.docx")
df = pd.read_excel('breakup_list.xlsx')
for _, row in df.iterrows():
    # 2. 准备好要替换的字典,Key 要和 Word 里的 {{Key}} 一一对应
    context = {
    'name': row['前任姓名'],
    'reason': row['分手理由'],
    'date': "2023年2月31日"
    }
    # 3. 渲染并保存
    tpl.render(context)
    tpl.save(f"再见_{row['前任姓名']}.docx")
    print("批量分手完成,下一位更乖。")

3. 深度定制版:带条件的“变色龙”

场景: 根据 Excel 里的绩效评分,生成的文档内容完全不同。优秀的夸出花,差的直接生成辞退信。

from docx import Document
import pandas as pd
df = pd.read_excel('performance.xlsx')
for _, row in df.iterrows():
    doc = Document()
    score = row['分数']
    name = row['姓名']
    if score >= 90:
        doc.add_heading(f"致:优秀的 {name}", level=1)
        doc.add_paragraph("你就是公司的脊梁,老板的贴心小棉袄!")
    elif score >= 60:
        doc.add_heading(f"致:平凡的 {name}", level=1)
        doc.add_paragraph("活着就好,继续努力,别摸鱼了。")
    else:
        doc.add_heading(f"致:即将自由的 {name}", level=1)
        doc.add_paragraph("外面的世界很精彩,祝你在保安行业发光发热。")
        doc.save(f"评价_{name}.docx")

4. 极端复杂版:图片也要塞进去

场景: 每个人的文档里不仅有文字,还要根据 Excel 里的路径塞入他们的“丑照”。

from docx import Document
from docx.shared import Inches
import pandas as pd
import os
df = pd.read_excel('staff.xlsx')
for _, row in df.iterrows():
    doc = Document()
    doc.add_heading(f"特工档案:{row['代号']}", 0)
    # 插入图片,Excel 里存的是图片路径,比如 "imgs/shrek.jpg"
    img_path = row['照片路径']
    if os.path.exists(img_path):
        doc.add_picture(img_path, width=Inches(2.0))
    else:
        doc.add_paragraph("[此处因长相太帅,无法显示]")
        doc.add_paragraph(f"主要技能:{row['技能']}")
        doc.save(f"档案_{row['代号']}.docx")

避坑小贴士(老司机的眼泪):

路径问题:如果你的 Excel 文件和代码不在一个文件夹,记得用 r"C:\Users\Desktop\file.xlsx" 这种原始字符串,防止反斜杠 \ 闹情绪。

数据类型:Excel 里的日期读出来可能是 Timestamp 对象,直接塞进 Word 会报错。记得用 str(row['日期']) 强行降维打击。

内存管理:如果你要生成 10000 份文档,建议在循环里及时 del doc(虽然 Python 有垃圾回收,但保险起见)。

关闭文件:运行代码前,千万关闭那个正在编辑的 Excel 文件,否则 Python 会提示权限错误,卡到你怀疑人生。

有了这几招,你现在已经是办公室里那个“看起来很忙,其实一直在喝咖啡”的神奇存在了!

💎 动手实战

这个任务在 Python 自动化办公中非常经典。我们就像在办一场“职场选秀”,要把后台的“练习生名单”批量变成正式的“出道通知书”。

我们要用到的核心工具是 python-docx,它能像操纵皮影戏一样控制 Word 文档。

🛠️ 第一步:准备“魔法卷轴”(模板)

首先,你需要创建一个 Word 文档,命名为 template.docx。在文档中,把需要变动的地方用双大括号括起来(就像给文档留出“插座”):

转正通知书

亲爱的 {{name}} 同友:

恭喜你通过了地狱般的 99 轮面试和 3 个月的“带薪搬砖”考察期。鉴于你在公司表现得比 AI 还要卷,我们正式宣布你转正为:{{job}}。

公司将奖励你:{{gift}} 一份!

望你继续发光发热,争取早日实现睡后收入!

--- 宇宙无敌搬砖委员会

🐍 第二步:编写 Python 代码

我们需要安装一个库:pip install python-docx。

import os
from docx import Document
# 1. 我们的“练习生名单”(模拟 100 份数据,这里先写 3 份代表一下)
# 真实场景下,你可以用 openpyxl 读取 Excel 里的 100 个人名
staff_list = [
{"name": "张三", "job": "首席摸鱼官", "gift": "霸王洗发水一瓶"},
{"name": "李四", "job": "资深背锅侠", "gift": "钛合金平底锅"},
{"name": "王五", "job": "高级画饼师", "gift": "超大号圆规(画饼更圆)"},
# ... 假设这里还有 97 个小伙伴
]
def generate_notices(data_list):
    # 如果没有存放通知书的文件夹,就新建一个
    if not os.path.exists('通知书结果'):
        os.makedirs('通知书结果')
        for staff in data_list:
            # 2. 打开魔法模板
            doc = Document('template.docx')
            # 3. 遍历文档中的段落,寻找“插座”并接通电源
            for paragraph in doc.paragraphs:
                for key, value in staff.items():
                    target_placeholder = f"{{{{{key}}}}}" # 构建成 {{name}} 这种形式
                    if target_placeholder in paragraph.text:
                        # 替换内容(就像把插头插进插座)
                        paragraph.text = paragraph.text.replace(target_placeholder, value)
                        # 4. 导出成品,文件名要有辨识度,不然老板以为你在发垃圾邮件
                        file_name = f"通知书结果/转正通知_{staff['name']}.docx"
                        doc.save(file_name)
                        print(f"✅ 已为【{staff['name']}】生成专属通知书!")
                        # 5. 启动魔法仪式
                        if __name__ == "__main__":
                            generate_notices(staff_list)

📝 第三步:详细操作步骤(避坑指南)

环境配置:确保你的电脑安装了 Python。在终端输入 pip install python-docx。如果下载慢,可以用清华镜像源。

模板精度:在 Word 模板里写 {{name}} 时,千万不要给这几个字设置不同的字体或颜色(比如 { 是宋体,{name}} 是微软雅黑),这会导致 Word 在底层把这个词拆成多个碎块,Python 就找不到了。

小技巧:建议先在记事本写好 {{name}},再粘贴进 Word。

数据来源:

如果你真的有 100 个人,建议把名单写在 Excel 里。

配合 pandas 或 openpyxl 库读取 Excel,再把每一行变成一个字典 {"name": "xxx", ...} 传给上面的 staff_list 即可。

运行脚本:把代码保存为 main.py,确保它和 template.docx 在同一个文件夹下。运行后,你会看到“通知书结果”文件夹里瞬间冒出 100 个文档。

💡 为什么这么做?

传统做法:复制、粘贴、改名、保存。手速再快,100 份也得折腾一上午,还容易把张三的薪水发给李四。

Python 做法:代码写完,回车。你还没去接咖啡,100 份文件已经整整齐齐躺在文件夹里了。这就叫“优雅地偷懒”。