当前位置:首页>python>使用python实现,Word批量替换神器:一键修改“考评时间”,通配符匹配空格,保留原格式

使用python实现,Word批量替换神器:一键修改“考评时间”,通配符匹配空格,保留原格式

  • 2026-08-18 23:11:08
使用python实现,Word批量替换神器:一键修改“考评时间”,通配符匹配空格,保留原格式

Word批量替换神器:一键修改“考评时间”,通配

符匹配空格,保留原格式


📌 适用场景(对号入座)

  • 党务工作者:党员积分表、民主评议表、考核表中大量“考评时间”需统一修改。
  • 人事/行政:员工档案、合同协议中的日期批量更新。
  • 教务/科研:论文格式、报告文档中的时间字段规范化。
  • 任何需要批量修改Word文档中特定文本(且格式复杂、空格不定)的工作。

只要满足:

  • 你的电脑是 Windows 系统
  • 已安装 Microsoft Office(Word)
  • 会基本的文件复制粘贴
  • 愿意花10分钟配置一次,之后永久使用

🎯 工具能帮你做什么?

功能
说明
✅ 可视化界面
点点鼠标就能操作,不需要写代码
✅ 多条规则同时执行
一次修改多个不同的文本
✅ 通配符模糊匹配
匹配空格数量不固定、年份变化等复杂情况
✅ 完美保留格式
字体、颜色、表格、页眉页脚统统不变
✅ 后台运行,不卡界面
处理大量文档时界面依然可以操作
✅ 失败不写盘
哪个文档出错,不会生成半成品文件
✅ 覆盖/另存为双模式
安全备份,也可直接覆盖原文件
✅ 实时日志+进度条
清楚看到每个文件的处理结果

🛠 准备工作(只需一次)

1. 安装 Python

  • 访问 python.org 下载 Python 3.8 及以上版本,安装时勾选“Add Python to PATH”
  • 安装完成后,打开 命令提示符(cmd),输入 python --version,显示版本号即成功。

2. 安装依赖库

在命令提示符中执行:

pip install pywin32

等待提示“Successfully installed”即可。

3. 下载工具代码

将文末的完整代码复制,粘贴到记事本中,保存为 word_batch_replace.py(文件名可以自定,但后缀必须是 .py)。

💡 建议保存在一个你容易找到的文件夹,比如 D:\我的工具\


🚀 使用方法(图文详解)

第一步:运行工具

双击 word_batch_replace.py,会弹出一个窗口,这就是主界面。

第二步:选择文件夹

  • 源文件夹:存放所有待修改的Word文档(支持子目录,会递归遍历)。
  • 目标文件夹:修改后的文档将保存在这里,并保留原有目录结构。如果勾选“直接覆盖原文件”,则目标文件夹设置无效(会直接修改原文件,请务必提前备份)。

第三步:设置替换规则

在“替换规则”区域,每行一条规则,格式为:

查找内容 → 替换为

示例:

  • 精确替换:考评时间:2026年7月 → 考评时间:2026年8月
  • 通配符替换(需勾选“启用通配符匹配”):考评时间:*月 → 考评时间:2026年8月

可以点击“添加规则”增加多行,点击“删除最后一行”移除不需要的规则,每行右侧的  可单独删除该行。

第四步:预览验证(强烈推荐!)

点击 “预览替换” 按钮,工具会打开源文件夹中的第一个文档,统计每条规则匹配到的数量,并显示一个匹配示例。如果匹配数量为 0,说明你的查找文本与文档内容不一致,请检查空格、标点符号(中英文冒号)等。

第五步:开始处理

点击 “开始处理”,工具会在后台启动Word,逐文档执行替换。界面上的进度条和日志窗口会实时反馈处理情况。如果中途想停止,点击 “取消” 按钮即可(会等待当前文档处理完再退出)。

第六步:检查结果

处理完成后,弹窗显示成功/失败数量。请打开目标文件夹(或原文件,如果覆盖模式)检查替换效果。


🧙‍♂️ 通配符核心技巧(必看!)

通配符是解决“空格不固定”“年月格式杂乱”的神器。以下是最常用的几个符号:

通配符
含义
示例
*
匹配任意字符(0个或多个),不跨段落
考评时间:*月
 → 匹配“考评时间:”到该段最后一个“月”之间的所有内容
?
匹配任意一个字符
202?年
 → 匹配“2024年”、“2025年”等
[ ]
匹配方括号内任意一个字符
[2026]
 → 匹配“2”、“0”、“2”、“6”中任意一个
[ - ]
匹配指定范围内的字符
[0-9]
 → 匹配任意数字
@
匹配前一个字符一次或多次
[ ]@
 → 匹配一个或多个半角空格
{n}
匹配前一个字符恰好 n 次
[ ]{2}
 → 匹配恰好两个空格
{n,}
匹配前一个字符至少 n 次
[ ]{2,}
 → 匹配两个及以上空格
^13
段落标记(回车符)
常用于匹配到段落结束

实战示例

需求
通配符规则
说明
匹配“考评时间:”后面任意内容直到“月”
考评时间:*月
注意冒号类型(中文/英文)需与文档一致
匹配“2026年5月”或“2026 年 5 月”(空格数量不定)
2026[ ]@年[ ]@5[ ]@月[ ]
内为半角空格,@表示一个或多个
匹配“7月”或“7 月”(半角空格)
7[ ]@月
可匹配“7月”、“7 月”、“7  月”等
匹配任意日期格式直到回车
*^13
谨慎使用,可能匹配过多

⚠️ 特别注意

  • 空格类型:文档中可能是半角空格(普通空格键)或全角空格(中文空格)。半角空格在通配符中写 [ ],全角空格写 [ ](方括号内放一个中文空格)。如果不确定,直接从文档中复制一个空格粘贴到方括号内。
  • 标点符号全半角:中文冒号“:”和英文冒号“:”完全不同,请确保与文档一致。
  • 贪婪性* 会匹配到该段落中最后一个“月”,如果段落中有多个“月”(比如“5月”和“6月”),可能会匹配过多。若只需匹配第一个“月”,可使用 [!^13]@ 匹配非回车字符,或改用更精确的日期规则(如 2026[ ]@年[ ]@5[ ]@月)。

❓ 常见问题与解决

问题
可能原因
解决办法
程序启动报 ModuleNotFoundError: No module named 'win32com'
未安装 pywin32
执行 pip install pywin32
预览显示匹配数量为0
查找文本与文档内容不一致
关闭通配符,从文档中复制完整字符串(包括空格)到查找框测试;确认冒号全半角、空格类型
替换后格式变了
使用了非COM方式(如python-docx)
本工具基于Win32 COM,完美保留格式,请确保使用的是文末提供的完整代码
通配符规则匹配了不该匹配的内容
*
 太贪婪
改用更精确的规则,比如匹配具体日期数字,而不是用 *

📦 完整代码(复制即可使用)

将以下代码保存为 word_batch_replace.py,双击运行。

# -*- coding: utf-8 -*-"""Word 批量替换工具(最终稳定版 · 路径彻底修复)功能:- 单例 Word 进程,后台运行- 多线程处理,界面不卡死- 安全替换(避免无限循环)- 支持通配符- 覆盖 / 另存为 模式- 失败不写盘- 实时日志 + 进度条- 自动修复路径格式(解决微云同步盘路径问题)"""import osimport timeimport tkinter as tkfrom tkinter import filedialog, messagebox, ttkimport threadingimport win32com.client as win32classWordBatchReplacer:def__init__(self, root):        self.root = root        self.root.title("Word 批量替换(最终版)")        self.root.geometry("760x700")# 控制变量        self.src_var = tk.StringVar()        self.dst_var = tk.StringVar()        self.overwrite_var = tk.IntVar(value=0)        self.wildcard_var = tk.IntVar(value=0)        self.rule_entries =[]        self.is_running =False        self.cancel_flag =False# ---------- 界面 ----------        frame_dir = tk.LabelFrame(root, text="文件夹设置")        frame_dir.pack(fill="x", padx=10, pady=5)        tk.Label(frame_dir, text="源文件夹:").grid(row=0, column=0, sticky="w")        tk.Entry(frame_dir, textvariable=self.src_var, width=50).grid(row=0, column=1, padx=5)        tk.Button(frame_dir, text="浏览", command=self.browse_src).grid(row=0, column=2)        tk.Label(frame_dir, text="目标文件夹:").grid(row=1, column=0, sticky="w", pady=5)        tk.Entry(frame_dir, textvariable=self.dst_var, width=50).grid(row=1, column=1, padx=5)        tk.Button(frame_dir, text="浏览", command=self.browse_dst).grid(row=1, column=2)        tk.Checkbutton(frame_dir, text="直接覆盖原文件(勾选后目标文件夹无效)",                       variable=self.overwrite_var).grid(row=2, column=0, columnspan=3, sticky="w", pady=5)        tk.Checkbutton(frame_dir, text="启用通配符匹配", variable=self.wildcard_var).grid(row=3, column=0, columnspan=3, sticky="w")        tk.Label(frame_dir, text="示例(通配符):考评时间:*月   或   7[ ]@月", fg="gray", font=("Arial",8)).grid(row=4, column=0, columnspan=3, sticky="w")# 规则列表        frame_rules = tk.LabelFrame(root, text="替换规则(每行一组)")        frame_rules.pack(fill="both", expand=True, padx=10, pady=5)        canvas = tk.Canvas(frame_rules)        scrollbar = ttk.Scrollbar(frame_rules, orient="vertical", command=canvas.yview)        self.scrollable_frame = ttk.Frame(canvas)        self.scrollable_frame.bind("<Configure>",lambda e: canvas.configure(scrollregion=canvas.bbox("all")))        canvas.create_window((0,0), window=self.scrollable_frame, anchor="nw")        canvas.configure(yscrollcommand=scrollbar.set)        canvas.pack(side="left", fill="both", expand=True)        scrollbar.pack(side="right", fill="y")        self.add_rule_row()# 按钮        frame_btns = tk.Frame(root)        frame_btns.pack(fill="x", padx=10, pady=5)        tk.Button(frame_btns, text="添加规则", command=self.add_rule_row).pack(side="left", padx=5)        tk.Button(frame_btns, text="删除最后一行", command=self.remove_last_rule).pack(side="left", padx=5)        tk.Button(frame_btns, text="预览替换", command=self.preview_replace, bg="lightyellow").pack(side="left", padx=5)        tk.Button(frame_btns, text="开始处理", command=self.start_thread, bg="lightgreen").pack(side="left", padx=5)        tk.Button(frame_btns, text="取消", command=self.cancel_processing, bg="lightcoral").pack(side="left", padx=5)# 状态和进度        self.status_var = tk.StringVar(value="就绪")        tk.Label(root, textvariable=self.status_var, relief="sunken", anchor="w").pack(fill="x", padx=10, pady=2)        self.progress = ttk.Progressbar(root, orient="horizontal", length=400, mode="determinate")        self.progress.pack(fill="x", padx=10, pady=5)# 日志        self.log_text = tk.Text(root, height=10, state='disabled', bg='#f0f0f0')        self.log_text.pack(fill='x', padx=10, pady=5)# ---------- 辅助方法 ----------deflog(self, msg):        self.log_text.config(state='normal')        self.log_text.insert('end', msg +'\n')        self.log_text.see('end')        self.log_text.config(state='disabled')        self.root.update_idletasks()defset_status(self, msg):        self.status_var.set(msg)        self.root.update_idletasks()defbrowse_src(self):        folder = filedialog.askdirectory(title="选择源文件夹")if folder:            self.src_var.set(os.path.normpath(folder))defbrowse_dst(self):        folder = filedialog.askdirectory(title="选择目标文件夹")if folder:            self.dst_var.set(os.path.normpath(folder))defadd_rule_row(self, old="", new=""):        frame = tk.Frame(self.scrollable_frame)        frame.pack(fill="x", pady=2)        old_var = tk.StringVar(value=old)        new_var = tk.StringVar(value=new)        tk.Entry(frame, textvariable=old_var, width=30).pack(side="left", padx=2)        tk.Label(frame, text=" → ").pack(side="left")        tk.Entry(frame, textvariable=new_var, width=30).pack(side="left", padx=2)        tk.Button(frame, text="✕", command=lambda f=frame: self.delete_row(f)).pack(side="left", padx=5)        self.rule_entries.append((old_var, new_var, frame))defdelete_row(self, frame):iflen(self.rule_entries)<=1:            messagebox.showwarning("警告","至少保留一行规则。")returnfor i,(_, _, f)inenumerate(self.rule_entries):if f == frame:                f.destroy()del self.rule_entries[i]breakdefremove_last_rule(self):iflen(self.rule_entries)<=1:            messagebox.showwarning("警告","至少保留一行规则。")return        self.rule_entries.pop()[2].destroy()defget_rules(self):return[(old.get().strip(), new.get())for old, new, _ in self.rule_entries if old.get().strip()]# ---------- 预览 ----------defpreview_replace(self):        src_dir = os.path.normpath(self.src_var.get().strip())ifnot src_dir:            messagebox.showerror("错误","请先选择源文件夹")return        rules = self.get_rules()ifnot rules:            messagebox.showerror("错误","请定义至少一条规则")return        use_wildcard = self.wildcard_var.get()==1        first_doc =Nonefor root, _, files in os.walk(src_dir):for f in files:if f.lower().endswith(('.doc','.docx')):                    first_doc = os.path.normpath(os.path.join(root, f))breakif first_doc:breakifnot first_doc:            messagebox.showinfo("提示","未找到Word文档")returntry:            word = win32.Dispatch("Word.Application")            word.Visible =False            word.DisplayAlerts =False            doc = word.Documents.Open(first_doc)            preview_text =[]for old, new in rules:                rng = doc.Range()                find = rng.Find                find.ClearFormatting()                find.Text = old                find.Forward =True                find.Wrap =0                find.MatchWildcards = use_wildcard                count =0                sample =""while find.Execute()and count <3:                    count +=1ifnot sample:                        ctx = find.Parent.Text.replace('\r',' ').replace('\n',' ')[:50]                        sample = ctx                    rng.Start = find.Parent.End                    find = rng.Find                    find.ClearFormatting()                    find.Text = old                    find.Forward =True                    find.Wrap =0                    find.MatchWildcards = use_wildcard                preview_text.append(f"规则 '{old}' → 匹配 {count} 处"+(f",示例: {sample}"if count else""))            doc.Close(False)            word.Quit()            messagebox.showinfo("预览结果","\n\n".join(preview_text))except Exception as e:            messagebox.showerror("预览失败",str(e))# ---------- 核心安全替换(避免无限循环) ----------defprocess_document(self, word_app, src_path, dst_path, rules, use_wildcard):        doc =Nonetry:# 双重标准化            src_path = os.path.normpath(src_path)            dst_path = os.path.normpath(dst_path)            doc = word_app.Documents.Open(src_path)            total_replaced =0for old, new in rules:                replaced =0                rng = doc.Range()                find = rng.Find                find.ClearFormatting()                find.Text = old                find.Forward =True                find.Wrap =0# 关键:不循环                find.MatchWildcards = use_wildcardwhile find.Execute():# 直接替换匹配到的文本                    find.Parent.Text = new                    replaced +=1# 移动范围到替换位置之后继续搜索                    rng.Start = find.Parent.End                    find = rng.Find                    find.ClearFormatting()                    find.Text = old                    find.Forward =True                    find.Wrap =0                    find.MatchWildcards = use_wildcard                self.log(f"    规则 '{old}' → 替换了 {replaced} 处")                total_replaced += replaced# 保存if dst_path == src_path:                doc.Save()else:                os.makedirs(os.path.dirname(dst_path), exist_ok=True)                doc.SaveAs(dst_path)            doc.Close()            self.log(f"  总共替换 {total_replaced} 处")returnTrueexcept Exception as e:            self.log(f"  ❌ 错误:{str(e)}")if doc:try: doc.Close(SaveChanges=False)except:passreturnFalse# ---------- 批量处理 ----------defbatch_process(self):# 关键修复:在开始时立即标准化路径        src_dir = os.path.normpath(self.src_var.get().strip())ifnot src_dir:            self.log("❌ 请选择源文件夹")return        overwrite = self.overwrite_var.get()==1        dst_dir = os.path.normpath(self.dst_var.get().strip())ifnot overwrite else""ifnot overwrite andnot dst_dir:            self.log("❌ 请选择目标文件夹或勾选覆盖")return        rules = self.get_rules()ifnot rules:            self.log("❌ 请至少添加一条规则")return        use_wildcard = self.wildcard_var.get()==1        word_files =[]for root, _, files in os.walk(src_dir):for f in files:if f.lower().endswith(('.doc','.docx')):                    word_files.append(os.path.normpath(os.path.join(root, f)))ifnot word_files:            self.log("❌ 未找到Word文档")return        total =len(word_files)        self.progress["maximum"]= total        self.progress["value"]=0        self.log(f"🚀 启动Word(后台),共 {total} 个文档")        self.set_status("正在启动 Word...")        word_app =Nonetry:            word_app = win32.Dispatch("Word.Application")            word_app.Visible =False            word_app.DisplayAlerts =False            word_app.Options.CheckGrammarWithSpelling =False            word_app.Options.CheckSpellingAsYouType =False            word_app.Options.CheckGrammarAsYouType =Falseexcept Exception as e:            self.log(f"❌ 启动失败:{e}")return        success =0        fail =0try:for idx, src_path inenumerate(word_files,1):if self.cancel_flag:                    self.log("⏹ 用户取消")break                self.set_status(f"处理 [{idx}/{total}{os.path.basename(src_path)}")                self.log(f"\n[{idx}/{total}{os.path.basename(src_path)}")# 目标路径也标准化if overwrite:                    dst_path = src_pathelse:                    dst_path = os.path.normpath(os.path.join(dst_dir, os.path.relpath(src_path, src_dir)))                self.log(f"  源文件: {src_path}")                self.log(f"  目标文件: {dst_path}")                ok =Falsefor attempt inrange(3):# 重试3次                    ok = self.process_document(word_app, src_path, dst_path, rules, use_wildcard)if ok:break                    time.sleep(0.5)if ok:                    success +=1                    self.log("  ✅ 成功")else:                    fail +=1                    self.log("  ❌ 失败")ifnot overwrite and os.path.exists(dst_path):try: os.remove(dst_path)except:pass                self.progress["value"]= idx                time.sleep(0.1)finally:try:                word_app.Quit(SaveChanges=False)except:pass            self.is_running =False            self.cancel_flag =False            self.set_status("处理完成")            self.log(f"\n✅ 全部完成:成功 {success},失败 {fail}")            messagebox.showinfo("完成",f"处理完成!\n成功:{success}\n失败:{fail}")defstart_thread(self):if self.is_running:            messagebox.showwarning("提示","正在处理中")return        self.is_running =True        self.cancel_flag =False        self.log_text.config(state='normal')        self.log_text.delete(1.0,'end')        self.log_text.config(state='disabled')        self.progress["value"]=0        threading.Thread(target=self.batch_process, daemon=True).start()defcancel_processing(self):if self.is_running:            self.cancel_flag =True            self.log("⏹ 正在取消...")else:            messagebox.showinfo("提示","没有正在进行的任务")if __name__ =="__main__":    root = tk.Tk()    app = WordBatchReplacer(root)    root.mainloop()

📌 重要提醒

  1. 备份!备份!备份! 首次使用请务必先复制一份文档到测试文件夹,确认效果后再对正式文件操作。
  2. 处理期间不要手动打开Word,避免文件冲突。
  3. 通配符规则不生效时,先关闭通配符,用从文档中复制的原文本精确匹配测试,再逐步引入通配符。

🏁 结语

有了这款工具,再多的Word文档修改任务也能轻松应对。它不仅能帮你节省大量时间,还能避免手动操作带来的错漏代码完全开源,可根据需要自由修改。如果你觉得有用,欢迎点赞、收藏、转发,让更多朋友告别重复劳动!


关注我,获取更多办公自动化干货! 🔥

#Word批量替换 #办公自动化 #Python工具 #通配符匹配 #批量修改日期 #党务工作 #人事管理 #Word通配符 #保留格式 #python 

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-22 00:59:40 HTTP/2.0 GET : https://f.mffb.com.cn/a/506003.html
  2. 运行时间 : 0.428774s [ 吞吐率:2.33req/s ] 内存消耗:5,034.25kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=a392b906c06f681094b575252d23f845
  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.000983s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001293s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.008583s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000612s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001445s ]
  6. SELECT * FROM `set` [ RunTime:0.026450s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001539s ]
  8. SELECT * FROM `article` WHERE `id` = 506003 LIMIT 1 [ RunTime:0.016811s ]
  9. UPDATE `article` SET `lasttime` = 1787331581 WHERE `id` = 506003 [ RunTime:0.019584s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000680s ]
  11. SELECT * FROM `article` WHERE `id` < 506003 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.033460s ]
  12. SELECT * FROM `article` WHERE `id` > 506003 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.009415s ]
  13. SELECT * FROM `article` WHERE `id` < 506003 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.066160s ]
  14. SELECT * FROM `article` WHERE `id` < 506003 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.018141s ]
  15. SELECT * FROM `article` WHERE `id` < 506003 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.036007s ]
0.432363s