当前位置:首页>python>《Python 从入门到精通》153|批量处理 Word 与 PDF:文档自动化的常见思路

《Python 从入门到精通》153|批量处理 Word 与 PDF:文档自动化的常见思路

  • 2026-08-25 06:39:00
《Python 从入门到精通》153|批量处理 Word 与 PDF:文档自动化的常见思路

一、文档自动化,真正难的往往不是技术,而是重复

办公自动化里,Excel 很常见,但 Word 和 PDF 也同样高频。

合同是 Word 或 PDF。 通知书是 Word。 报告是 Word。 制度文件是 PDF。 发票、回执、盖章扫描件、归档资料,很多也都是 PDF。

这些文档类工作,最让人疲惫的地方通常不是“不会做”,而是:

内容差不多 格式差不多 每次只改少量字段 文件数量很多 而且还要一份一份打开处理

比如这些真实场景:

批量生成录取通知书 按名单批量生成劳动合同 把一批 Word 报告统一转成 PDF 从 PDF 中提取页数、标题、关键词 批量合并多个 PDF 给一批 PDF 重新命名、分类归档 从 Word 模板里替换客户名、日期、金额 把 Excel 里的数据填进 Word 模板生成正式文档

这些工作,只要量一大,人就会变成复制粘贴机器。 而 Python 在这种“规则明确、内容批量生成、文件反复处理”的场景里,非常有价值。

二、先分清两个问题:你是在处理内容,还是处理文件

批量处理 Word 和 PDF,思路上最好先分成两层。

第一层,文件层面。 你关心的是:

有哪些文件 文件名是什么 放在哪个文件夹 要不要批量改名 要不要移动、复制、归档 要不要合并、拆分

第二层,内容层面。 你关心的是:

文档里的文字是什么 要不要替换变量 要不要批量生成正文 要不要抽取某些字段 要不要新增段落、表格、页眉页脚 要不要从 PDF 里提取文字

很多人一上来就扑到“怎么生成 Word”。 其实更实战的思路是先想清楚:

我要自动化的是文件流转,还是文档内容本身。 这两者常常会同时出现,但技术重点不一样。

三、处理 Word 和 PDF,最常见的几类任务

你以后做文档自动化,基本绕不开下面这些类型。

第一类,批量生成。 用模板生成很多 Word 文档或 PDF 文档。

第二类,批量修改。 对已有文档做统一替换、补充、删除、改名。

第三类,批量提取。 从一批 Word 或 PDF 中提取文字、页数、标题、编号、表格信息。

第四类,批量转换。 Word 转 PDF,PDF 拆分,多个 PDF 合并成一个。

第五类,批量归档。 按照规则重命名、分类、移动、归档。

这五类任务几乎覆盖了大多数办公文档自动化场景。 你以后碰到新需求,往往也能先归到这几类里,再决定用什么库、怎么写。

四、处理 Word,最常见的库是 python-docx

如果你要操作 .docx 文件,最常见的库就是 python-docx

安装:

python -m pip install python-docx

导入:

from docx import Document

这个库特别适合做这些事:

创建 Word 文档 新增标题、段落、表格 读取已有 Word 内容 替换部分文本 设置基础样式 批量生成统一格式文档

注意一个很现实的点:

它主要处理的是 .docx,不是老式 .doc。 所以如果公司里还保留很多旧版 Word 文件,往往要先转换成 .docx 再处理会更稳。

五、最基础的 Word 生成:从零创建一个文档

看一个最简单例子:

from docx import Documentdoc = Document()doc.add_heading("员工入职通知", level=1)doc.add_paragraph("张三,欢迎加入本公司。")doc.add_paragraph("请于 2025-02-01 到人事部办理入职手续。")doc.save("入职通知.docx")

这段代码做了几件事:

创建一个 Word 文档 加一个一级标题 加两段正文 保存成 docx 文件

这就是最基础的“程序生成 Word”。

如果你平时是手工打开 Word、输入标题、复制模板、改人名、再另存为,那么你已经能感觉到这类脚本的价值了。

六、批量生成 Word,本质上就是模板加变量

绝大多数 Word 自动化生成任务,其实不是“从零自由写作”,而是:

有一套固定模板 里面有几个变量 把变量批量替换进去 生成很多份正式文档

比如员工通知:

姓名 日期 部门 岗位

每个人不一样,但整体结构一样。

你可以先用最简单的拼接方式生成:

from docx import Documentemployees = [    {"姓名""张三""部门""市场部""入职日期""2025-02-01"},    {"姓名""李四""部门""运营部""入职日期""2025-02-03"},    {"姓名""王五""部门""财务部""入职日期""2025-02-05"},]for emp in employees:    doc = Document()    doc.add_heading("员工入职通知", level=1)    doc.add_paragraph(f"{emp['姓名']},欢迎加入本公司。")    doc.add_paragraph(f"你将入职 {emp['部门']},请于 {emp['入职日期']} 到人事部办理手续。")    doc.save(f"{emp['姓名']}_入职通知.docx")

这已经能批量生成三份 Word 文件了。

你会发现,这类自动化的核心根本不是 Word 本身有多难,而是:

把固定内容和变化内容拆开。 固定内容进模板。 变化内容来自数据。 然后让程序批量循环。

七、如果数据来自 Excel,Word 批量生成会更像真实办公

前面的员工数据是手写在代码里的。 现实里,更常见的是从 Excel 读名单,再生成 Word。

比如:

import pandas as pdfrom docx import Documentdf = pd.read_excel("员工名单.xlsx")for _, row in df.iterrows():    doc = Document()    doc.add_heading("员工入职通知", level=1)    doc.add_paragraph(f"{row['姓名']},欢迎加入本公司。")    doc.add_paragraph(f"你将入职 {row['部门']},请于 {row['入职日期']} 到人事部办理手续。")    doc.save(f"{row['姓名']}_入职通知.docx")

这条链路非常典型:

Excel 提供数据 Python 读取数据 Word 负责输出正式文档

很多公司的通知书、证明、回执、报告封面,本质上都能按这个套路自动生成。

八、Word 不只是段落,还经常涉及表格

办公文档里,很多内容不是纯文字,而是表格。

比如日报、月报、清单、明细、签收表、对账单。 这时候就会用到 add_table()

示例:

from docx import Documentdoc = Document()doc.add_heading("销售汇总表", level=1)table = doc.add_table(rows=1, cols=3)header_cells = table.rows[0].cellsheader_cells[0].text = "商品"header_cells[1].text = "销量"header_cells[2].text = "销售额"data = [    ["苹果""120""600"],    ["香蕉""150""450"],    ["橙子""90""360"]]for item in data:    row_cells = table.add_row().cells    row_cells[0].text = item[0]    row_cells[1].text = item[1]    row_cells[2].text = item[2]doc.save("销售汇总表.docx")

这个例子说明:

程序不只是能写段落,也能生成结构化表格。 这在日报、统计表、结果通知里非常有用。

九、读取 Word 文档内容,也很常见

除了生成文档,有时你还要从已有 Word 文件里提取文字。

最基础的读取方式:

from docx import Documentdoc = Document("通知.docx")for para in doc.paragraphs:    print(para.text)

这会把文档中的段落文字一段一段打印出来。

这适合什么场景。

比如:

检查一批 Word 是否包含某个关键词 提取文档中的固定字段 做简单内容审查 统计某些模板是否填写完整

不过要注意,Word 文档里的结构可能比较复杂。 正文、表格、页眉页脚、文本框不一定都能用同一套简单方式读取全。 所以实际提取时,要先明确自己到底要抓哪部分内容。

十、Word 的内容替换,没有你想得那么无脑

很多人一想到 Word 自动化,第一反应就是:

把模板里的“姓名”替换掉不就行了。

方向没错,但实际中要注意一个坑:

Word 里的文本在底层不一定是整段连续存储的。 有些看起来连续的一句话,内部可能被拆成多个 run。 尤其当一段文字中间改过字体、颜色、加粗、下划线时,更容易被拆。

所以如果你只是做简单场景,先用段落整体替换可以试:

from docx import Documentdoc = Document("模板.docx")for para in doc.paragraphs:if"{姓名}"in para.text:        para.text = para.text.replace("{姓名}""张三")doc.save("替换后.docx")

这种写法在简单模板里常常够用。 但如果模板格式复杂,直接替换 para.text 可能会导致原有局部样式丢失。 这也是为什么真实项目里,模板设计往往要尽量简化变量所在区域,避免过于花哨。

十一、做 Word 模板,最实用的思路是预留占位符

比如在模板中写:

{姓名}{部门}{日期}{金额}

然后程序批量替换这些占位符。

这类模板思路非常重要,因为它能把“内容设计”和“程序生成”分开。

写模板的人只管把文档排版好。 写脚本的人只管把变量填进去。

一个简单示例:

from docx import Documentdata = {"{姓名}""张三","{部门}""市场部","{日期}""2025-02-01"}doc = Document("通知模板.docx")for para in doc.paragraphs:for old, new in data.items():if old in para.text:            para.text = para.text.replace(old, new)doc.save("张三_通知.docx")

这个模式特别实用。 因为一旦模板设计合理,后面批量生成就会非常顺。

十二、处理 PDF,和处理 Word 的思路不太一样

Word 更像“可编辑文档”。 PDF 更像“定稿文档”。

也就是说:

Word 更适合生成、修改、填模板 PDF 更适合阅读、归档、拆分、合并、提取

这决定了你处理 PDF 时,常见需求通常和 Word 不同。

最常见的 PDF 任务有:

读取页数 合并多个 PDF 拆分 PDF 提取文字 按页保存 批量重命名 分类归档

如果你想改 PDF 内容本身,那通常比 Word 麻烦得多。 因为 PDF 从设计目标上,就不是为“方便修改”而生的。

十三、处理 PDF 最常见的基础库之一:PyPDF2

安装:

python -m pip install PyPDF2

导入:

from PyPDF2 import PdfReader, PdfWriter

它很适合做这些基础动作:

读 PDF 看页数 按页拆分 合并 PDF 提取部分文本

先看最简单的读取页数:

from PyPDF2 import PdfReaderreader = PdfReader("合同.pdf")print("页数:", len(reader.pages))

这类操作在文档归档、检查完整性时很实用。

十四、提取 PDF 文字,要先接受一个现实:不是所有 PDF 都能顺利提

很多人一听“提取 PDF 文字”,以为像读 txt 一样简单。 现实里要分情况。

如果 PDF 本质上是文本型 PDF,也就是里面真有文字层,通常能提得比较顺。 如果 PDF 本质上是扫描图片型 PDF,那直接提取往往拿不到真正文本,得走 OCR 路线。

先看普通文本型 PDF 提取:

from PyPDF2 import PdfReaderreader = PdfReader("报告.pdf")for page in reader.pages:    text = page.extract_text()    print(text)

这能处理一部分常见 PDF。 但如果遇到提取结果换行乱、表格散、中文粘连、顺序奇怪,也别太意外。 PDF 文字提取,本来就比 Word 难搞。

所以你以后做 PDF 提取时,先问自己一句:

这个 PDF 是文字型,还是扫描型。 这个判断特别重要。

十五、合并多个 PDF,是高频中的高频

比如你有多个 PDF:

封面.pdf 正文.pdf 附件.pdf

想合成一个文件。 这时可以这样做:

from PyPDF2 import PdfMergermerger = PdfMerger()merger.append("封面.pdf")merger.append("正文.pdf")merger.append("附件.pdf")merger.write("完整报告.pdf")merger.close()

如果你要批量把一个文件夹里的 PDF 合并:

from PyPDF2 import PdfMergerfrom pathlib import Pathfolder = Path("报告文件")merger = PdfMerger()for file in sorted(folder.glob("*.pdf")):    merger.append(str(file))merger.write("合并结果.pdf")merger.close()

这类脚本在报告归档、合同合订、资料打包时特别常见。

十六、拆分 PDF,也非常常用

有时不是合并,而是要拆。

比如一个 50 页 PDF,要拆成单页文件,或者提取其中几页。 这时可以用 PdfWriter

提取前两页:

from PyPDF2 import PdfReader, PdfWriterreader = PdfReader("大文件.pdf")writer = PdfWriter()for i in range(2):    writer.add_page(reader.pages[i])with open("前两页.pdf""wb"as f:    writer.write(f)

如果想把每一页拆成一个单独文件:

from PyPDF2 import PdfReader, PdfWriterreader = PdfReader("大文件.pdf")for i, page in enumerate(reader.pages, start=1):    writer = PdfWriter()    writer.add_page(page)with open(f"第{i}页.pdf""wb"as f:        writer.write(f)

这种操作在合同拆页、扫描件分页、资料拆分时很实用。

十七、批量重命名和归档 PDF,往往比“修改内容”更实用

很多办公室里的 PDF 自动化,根本不需要动文档内容。 更常见的是:

按规则重命名 按客户名归档 按日期分类 按页数筛出异常文件

这种情况下,文件系统操作往往比 PDF 内容处理更重要。

比如把所有 PDF 统一改名:

from pathlib import Pathfolder = Path("发票")for index, file in enumerate(folder.glob("*.pdf"), start=1):    new_name = f"发票_{index}.pdf"    file.rename(folder / new_name)

按文件名中的日期归档:

from pathlib import Pathimport shutilfolder = Path("合同")target = Path("归档")target.mkdir(exist_ok=True)for file in folder.glob("*.pdf"):    year = file.name[:4]    year_folder = target / year    year_folder.mkdir(exist_ok=True)    shutil.copy(file, year_folder / file.name)

你会发现,很多 PDF 自动化真正值钱的地方,不是“操作 PDF 内部结构”,而是围绕 PDF 做批量文件流转。

十八、Word 转 PDF,通常是办公自动化里很现实的需求

很多正式文件最终要发 PDF。 原因很简单:

格式不容易乱 别人打开更方便 更适合归档和打印

所以现实里经常出现这种需求:

先批量生成 Word 再统一转成 PDF

但这里要说一个很现实的点:

纯 Python 直接“高质量、稳定地跨平台把 Word 转 PDF”,并不是所有环境下都同样简单。 很多时候会依赖本机安装的 Office、系统环境,或者借助其他工具链。

在 Windows 办公环境里,常见思路之一是调用本机 Word 程序完成转换。 如果环境允许,这类方案很实用。 但它依赖办公软件环境,不像读写文本那样完全纯脚本化。

所以你要建立一个现实预期:

Word 生成很适合 Python PDF 拆并提取很适合 Python Word 转 PDF 能做,但常常和本机办公环境强相关

这类需求做项目时,通常要先确认部署环境。

十九、一个典型实战链路:Excel 名单 + Word 模板 + PDF 归档

这是很多办公室里非常有代表性的自动化套路。

第一步,从 Excel 读取名单和字段 第二步,把数据填进 Word 模板 第三步,生成一批 Word 文件 第四步,必要时转成 PDF 第五步,按部门、日期或姓名归档

这个链路为什么重要。

因为它说明,文档自动化几乎从来不是单点操作。 它常常是:

Excel 提供数据 Word 提供模板 PDF 提供交付格式 文件夹提供归档结构

而 Python 的强项,恰恰在于它能把这些环节串起来。

二十、做文档自动化时,最该先想清楚的是模板和规则

很多人一上来就问:

这个库怎么调 那个对象怎么改

其实文档自动化里,真正决定项目成败的,经常不是代码细节,而是前期规则设计。

比如你要先想清楚:

模板是否统一 占位符怎么写 变量来源在哪 输出文件名规则是什么 文件存放目录规则是什么 是否要保留原文件 是否需要失败重试 是否需要日志记录 是否要给人二次检查

这些问题如果前面不理顺,后面代码会越写越乱。 所以做文档自动化,最好先把“人工作业流程”翻译成“规则流程图”,再写代码。

二十一、文档自动化里,最容易踩的几个坑

1. 把 Word 模板做得过于复杂

变量拆在很多格式片段里,替换时很容易出问题。 模板越规整,程序越稳定。

2. 指望 PDF 像 Word 一样好改

PDF 更适合提取、合并、拆分、归档,不适合做复杂正文修改。

3. 文件名规则混乱

批量生成后,如果命名规则不统一,后续归档和查找会很痛苦。

4. 一上来直接覆盖原文件

脚本没跑稳之前,最好输出到新目录,别直接动原件。

5. 提取 PDF 文字时没先判断是不是扫描件

扫描型 PDF 往往提不出真正文字,要走 OCR。

6. 只关注代码,不关注模板设计

很多问题不是代码不会,而是模板设计不适合自动化。

二十二、什么时候优先选 Word,什么时候优先选 PDF

如果你是要生成、填写、修改、编辑内容,优先想到 Word。 如果你是要交付、归档、拆分、合并、提取页数,优先想到 PDF。

再说直白一点:

要“写”,多半先选 Word。 要“发”和“存”,多半最后是 PDF。

这也是很多自动化流程会同时碰到二者的原因。

二十三、这一章最该记住的不是几个库名,而是一套文档自动化思路

先判断是处理内容还是处理文件。 再判断对象是 Word 还是 PDF。 如果是 Word,优先想模板、变量、批量生成。 如果是 PDF,优先想提取、合并、拆分、归档。 如果数据来自 Excel,就把 Excel 当数据源。 如果最终要交付,就把 PDF 当结果格式。 如果需求复杂,就把流程拆开,一步一步串起来。

这套思路一旦建立起来,你以后面对文档自动化任务,就不会只剩“手工点一遍”这一条路。

二十四、本章要点整理

批量处理 Word 与 PDF,核心目标通常是生成、修改、提取、转换和归档。 处理 Word 最常用的库之一是 python-docx,适合创建文档、添加段落、表格、读取文本和做简单模板替换。 处理 PDF 常用 PyPDF2 等工具,适合读取页数、提取文字、合并 PDF、拆分 PDF。 Word 更适合可编辑内容的生成与修改,PDF 更适合定稿、交付、归档和拆并处理。 真实文档自动化往往不是单点任务,而是和 Excel 数据源、文件命名规则、归档目录一起构成完整流程。 文档自动化真正的关键,不只是会用库,而是先把模板、字段、命名和流程规则设计清楚。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-25 08:18:25 HTTP/2.0 GET : https://f.mffb.com.cn/a/512112.html
  2. 运行时间 : 0.243307s [ 吞吐率:4.11req/s ] 内存消耗:4,629.19kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=6df3d11ba98106cdcf8382b94c34aeb2
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001006s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001476s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000780s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.002459s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001364s ]
  6. SELECT * FROM `set` [ RunTime:0.000596s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001428s ]
  8. SELECT * FROM `article` WHERE `id` = 512112 LIMIT 1 [ RunTime:0.001162s ]
  9. UPDATE `article` SET `lasttime` = 1787617105 WHERE `id` = 512112 [ RunTime:0.009725s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000662s ]
  11. SELECT * FROM `article` WHERE `id` < 512112 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001600s ]
  12. SELECT * FROM `article` WHERE `id` > 512112 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001197s ]
  13. SELECT * FROM `article` WHERE `id` < 512112 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.026197s ]
  14. SELECT * FROM `article` WHERE `id` < 512112 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003584s ]
  15. SELECT * FROM `article` WHERE `id` < 512112 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.020396s ]
0.249252s