乐于分享
好东西不私藏

Python 玩转 Excel 案例【第 24 期】:Excel数据追加,保留原始数据

Python 玩转 Excel 案例【第 24 期】:Excel数据追加,保留原始数据

Python 玩转 Excel 案例【第 24 期】:Excel数据追加,保留原始数据

📌 案例说明

在实际工作中,我们经常需要定期向同一个Excel模板追加新数据,而不是每次都从头覆盖。比如:

  • • 每月销售数据汇总
  • • 每日日志记录追加
  • • 多批次数据合并

本案例演示如何自动识别模板中已有的数据行,将新数据追加到末尾,同时保持列映射的灵活性(数据文件的列顺序可以与模板不同)。

模板文件(模板.xlsx):

A
B
C
D
E
日期
产品名称
销售员
单价
数量
2024/1/1
手机
张三
5000
5

数据文件(销售数据.xlsx):

A
B
C
D
E
产品名称
日期
单价
销售员
数量
充电器
2024/1/1
6560
王五
4
智能手表
2024/1/2
9738
王五
18
...
...
...
...
...

需求:将数据文件中的44行数据追加到模板末尾,通过表头匹配自动对应列,不管数据文件的列顺序如何。

核心操作

  1. 1. 自动查找模板最后一个有数据的行
  2. 2. 根据表头名称建立列映射(而非固定列位置)
  3. 3. 从空行开始追加写入新数据

关键库pandasopenpyxl


📜 完整代码

"""
Excel模板填充工具 - 数据追加
功能:向模板末尾追加新数据,自动识别最后一行
适用:需要多次追加数据的场景
"""


import
 pandas as pd
from
 openpyxl import load_workbook

# 配置

TEMPLATE = "模板.xlsx"
DATA_FILE = "销售数据.xlsx"
OUTPUT = "追加数据后.xlsx"

# 1. 读取数据

df = pd.read_excel(DATA_FILE)
rows = len(df)
print
(f"读取数据: {rows}行")

# 2. 加载模板

wb = load_workbook(TEMPLATE)
ws = wb.active

# 3. 从下往上找最后一个有数据的行

START_ROW = 2
for
 row in range(ws.max_row, START_ROW - 1, -1):
    if
 any(cell.value is not None for cell in ws[row]):
        last_row = row
        break

else
:
    last_row = START_ROW - 1

print
(f"模板现有数据: 最后一行是第{last_row}行")

# 4. 确定数据写入的起始行

write_start_row = last_row + 1
print
(f"新数据将从第{write_start_row}行开始写入")

# 5. 获取列映射(根据表头找到对应的列)

headers = [cell.value for cell in ws[1]]
col_map = {}
for
 idx, header in enumerate(headers, start=1):
    if
 header in df.columns:
        col_map[header] = idx

print
(f"列映射: {col_map}")

# 6. 追加写入新数据

print
("追加写入新数据...")
for
 i, row in df.iterrows():
    target_row = write_start_row + i
    for
 col_name, col_idx in col_map.items():
        value = row[col_name]
        if
 not pd.isna(value):
            ws.cell(row=target_row, column=col_idx, value=value)

print
(f"数据写入完成,共 {rows} 行")

# 7. 保存

wb.save(OUTPUT)
print
(f"完成!→ {OUTPUT}")
print
(f"追加数据范围: 第{write_start_row}行 到 第{write_start_row + rows - 1}行")

运行结果(追加数据后.xlsx):

A
B
C
D
E
日期
产品名称
销售员
单价
数量
2024/1/1
手机
张三
5000
5
2024/1/1
充电器
王五
6560
4
2024/1/2
智能手表
王五
9738
18
...
...
...
...
...
2024/2/13
鼠标
赵六
4563
11

💡 结果:模板原有的1行数据被保留,新追加的44行数据从第3行开始写入,共计45行数据。


第一步:导入所需库

import pandas as pd
from
 openpyxl import load_workbook

库说明

  • • pandas
    读取数据文件,处理列映射
  • • openpyxl
    操作模板,支持读写Excel文件

第二步:读取数据

df = pd.read_excel(DATA_FILE)
rows = len(df)

功能说明

  • • pd.read_excel()
      读取 Excel 文件,返回 DataFrame 对象
  • • len(df)
      获取 DataFrame 的行数(数据条数)

输出结果

读取数据: 44行

数据文件结构

数据文件的列顺序与模板不同:

产品名称
日期
单价
销售员
数量
充电器
2024/1/1
6560
王五
4
智能手表
2024/1/2
9738
王五
18

这正是本案例需要列映射的原因——数据文件的列顺序是任意的,必须通过表头名称进行匹配。


第三步:加载模板

wb = load_workbook(TEMPLATE)
ws = wb.active

代码解析

  • • load_workbook(TEMPLATE)
    打开指定路径的 Excel 文件,返回 Workbook 对象(代表整个工作簿)
  • • wb.active
    获取当前激活的工作表,返回 Worksheet 对象(代表具体的 Sheet)

Workbook 对象常用操作

  • • wb.sheetnames
    获取所有工作表名称列表
  • • wb["Sheet1"]
    通过名称获取指定工作表
  • • wb.save(OUTPUT)
    保存工作簿到文件

Worksheet 对象常用操作

  • • ws.title:获取或修改工作表名称
  • • ws.max_row:获取有数据的最大行号
  • • ws.max_column:获取有数据的最大列号
  • • ws[row]:获取某行的所有单元格
  • • ws.cell(row, column):获取指定单元格

模板结构

行号
A列
B列
C列
D列
E列
1
日期
产品名称
销售员
单价
数量
2
2024/1/1
手机
张三
5000
5
3+
  • • 第1行:表头行,用于列映射
  • • 第2行:已有数据
  • • 第3行及以后:空白区域,等待追加

第四步:查找最后一个有数据的行

START_ROW = 2
for
 row in range(ws.max_row, START_ROW - 1, -1):
    if
 any(cell.value is not None for cell in ws[row]):
        last_row = row
        break

else
:
    last_row = START_ROW - 1

为什么要从下往上找?

Excel 工作表可能存在空单元格夹杂在数据中间的情况。从最后一行倒序查找,第一个遇到的非空行就是真正的最后一条数据所在行

倒序查找逻辑

列号:   1    2    3    4    5
       A    B    C    D    E
行号: ┌────┬────┬────┬────┬────┐
1    │日期│产品│销售│单价│数量│ ← 表头行(跳过)
     ├────┼────┼────┼────┼────┤
2    │1/1 │手机│张三│5000│ 5  │ ← 有数据(last_row = 2)
     ├────┼────┼────┼────┼────┤
3    │    │    │    │    │    │ ← 空行
     ├────┼────┼────┼────┼────┤
4    │    │    │    │    │    │ ← 空行
     └────┴────┴────┴────┴────┘

遍历过程

row
该行是否有数据?
结果
ws.max_row (1048576)
继续向上找
...
...
...
4
继续向上找
3
继续向上找
2
✅ 是
last_row = 2
,退出循环

any() 函数的作用

any(cell.value is not None for cell in ws[row])

拆解分析

  • • ws[row]:获取第 row 行的所有单元格,返回一个元组,如 (A2单元格, B2单元格, C2单元格, D2单元格, E2单元格)
  • • for cell in ws[row]:遍历这行中的每一个单元格对象
  • • cell.value is not None:判断单元格的值是否不为空(None)
  • • 外层 any():对遍历产生的多个布尔值进行"或"运算

any() 的执行逻辑

# 假设第2行的值
values = ["2024/1/1", "手机", "张三", 5000, 5]
# any() 等价于:

result = (values[0] is not None) or (values[1] is not None) or ... or (values[4] is not None)
# 结果:True

短路特性

# any() 从左到右检查,遇到第一个 True 就立即返回 True,不再继续检查
any
([False, False, True, 停止检查, 不再执行])

一句话总结any(cell.value is not None for cell in ws[row]) 判断该行是否至少有一个非空单元格。只要有一个单元格有值,就认为这行有数据。

range(ws.max_row, START_ROW - 1, -1) 参数详解

range(ws.max_row, START_ROW - 1, -1)

参数说明

  • • start = ws.max_row:从最大行号开始(如1048576)
  • • stop = START_ROW - 1:在 START_ROW - 1 处停止(不包含
  • • step = -1:每次减1,倒序遍历

range() 的左闭右开特性

range(start, stop, step) 生成的序列包含 start,不包含 stop

当 START_ROW = 2 时:

  • • stop = 2 - 1 = 1
  • • 生成的序列:max_row, max_row-1, max_row-2, ..., 3, 2
  • • 包含第 max_row 行,包含第 2 行,不包含第 1 行

为什么要设置 stop = 1

因为要排除第1行(表头行),即使表头有值也不能作为数据行处理。设置 stop = 1 后,循环到第2行就结束,第1行被排除在外。

一句话总结range(max_row, START_ROW-1, -1) 从最后一行倒序遍历到第2行(含),不包含第1行。

for...else 结构解析

for row in range(ws.max_row, START_ROW - 1, -1):
    if
 any(cell.value is not None for cell in ws[row]):
        last_row = row
        break

else
:
    last_row = START_ROW - 1

核心规则(两种情况)

  • • if条件满足,break 跳出整个 for 循环,同时跳过else 子句
  • • 循环正常结束(没有被 break 中断)时,执行 else 子句

Python 特有语法for 和 while 都可以跟 else,这是 C、Java、JavaScript 中没有的特性。

场景分析

情况
找到非空行?
执行 break
else
 是否执行?
last_row
 结果
模板有数据
✅ 是
是(跳出循环)
找到的行号
模板完全空白
❌ 否
否(循环自然结束)
START_ROW - 1
(即1)

示例:模板只有表头,无数据行

  • • 循环遍历每一行,全部为空 → if 条件始终为 False → 永远不会执行 break
  • • 循环正常结束后,进入 else 子句,设置 last_row = 1
  • • 后续计算 write_start_row = last_row + 1 = 2,数据从第2行开始写入 ✅

第五步:确定数据写入起始行

write_start_row = last_row + 1
print
(f"新数据将从第{write_start_row}行开始写入")

计算公式

写入起始行 = 最后数据行 + 1

输出示例

模板现有数据: 最后一行是第2行
新数据将从第3行开始写入

第六步:建立列映射

headers = [cell.value for cell in ws[1]]
col_map = {}
for
 idx, header in enumerate(headers, start=1):
    if
 header in df.columns:
        col_map[header] = idx

为什么要建立列映射?

模板和数据文件的列顺序可能不同:

模板列顺序
数据文件列顺序
A列:日期
A列:产品名称
B列:产品名称
B列:日期
C列:销售员
C列:单价
D列:单价
D列:销售员
E列:数量
E列:数量

如果按固定位置写入(第1列写第1列),数据就会错位。通过表头名称匹配,可以确保:

  • • 模板的"产品名称"列 ← 数据文件的"产品名称"列
  • • 模板的"销售员"列 ← 数据文件的"销售员"列

enumerate(headers, start=1) 的作用

headers = ["日期", "产品名称", "销售员", "单价", "数量"]

enumerate(headers, start=1) 生成:

索引 idx
值 header
1
"日期"
2
"产品名称"
3
"销售员"
4
"单价"
5
"数量"

start=1 让索引从1开始,直接对应 Excel 的列号(A=1, B=2...)。

列映射结果

col_map = {
    "日期"
: 1,      # 模板A列
    "产品名称"
: 2,   # 模板B列
    "销售员"
: 3,     # 模板C列
    "单价"
: 4,       # 模板D列
    "数量"
: 5        # 模板E列
}

输出示例

列映射: {'日期': 1, '产品名称': 2, '销售员': 3, '单价': 4, '数量': 5}

if header in df.columns 的作用

只映射同时在模板和数据文件中都存在的列,避免:

  • • 模板中的列在数据文件中不存在 → 跳过,不会报错
  • • 数据文件中的列在模板中不存在 → 不会出现在映射中,不会被写入

第七步:追加写入新数据

for i, row in df.iterrows():
    target_row = write_start_row + i
    for
 col_name, col_idx in col_map.items():
        value = row[col_name]
        if
 not pd.isna(value):
            ws.cell(row=target_row, column=col_idx, value=value)

df.iterrows() 逐行遍历

for i, row in df.iterrows():

iterrows() 的作用:遍历 DataFrame 的每一行,返回 (索引, 行数据)row 是一个 Series 对象,可以像字典一样通过列名取值。

示例

i
row (Series 对象)
0
row["产品名称"]
 → "充电器"
row["日期"] → "2024/1/1"
row["单价"] → 6560
row["销售员"] → "王五"
row["数量"] → 4
1
row["产品名称"]
 → "智能手表"
row["日期"] → "2024/1/2"
row["单价"] → 9738
row["销售员"] → "王五"
row["数量"] → 18

取值方式

  • • row["列名"](推荐)
  • • row.列名(也支持,但不推荐,容易与 Series 方法冲突)

目标行号计算

target_row = write_start_row + i

当 write_start_row = 3 时:

i
target_row
含义
0
3
第1条数据 → 第3行
1
4
第2条数据 → 第4行
2
5
第3条数据 → 第5行
...
...
...

col_map.items() 遍历解析

for col_name, col_idx in col_map.items():
    value = row[col_name]

col_map 的内容

col_map = {
    "日期"
: 1,
    "产品名称"
: 2,
    "销售员"
: 3,
    "单价"
: 4,
    "数量"
: 5
}

col_map.items() 的作用

返回字典的键值对视图,每个元素是一个元组 (键, 值)

list(col_map.items())
# [("日期", 1), ("产品名称", 2), ("销售员", 3), ("单价", 4), ("数量", 5)]

循环过程

遍历 col_map 的每一对键值,依次执行:

  1. 1. col_name = "日期"col_idx = 1
    → value = row["日期"]
    → 写入 ws.cell(row=target_row, column=1)
  2. 2. col_name = "产品名称"col_idx = 2
    → value = row["产品名称"]
    → 写入 ws.cell(row=target_row, column=2)
  3. 3. col_name = "销售员"col_idx = 3
    → value = row["销售员"]
    → 写入 ws.cell(row=target_row, column=3)
  4. 4. col_name = "单价"col_idx = 4
    → value = row["单价"]
    → 写入 ws.cell(row=target_row, column=4)
  5. 5. col_name = "数量"col_idx = 5
    → value = row["数量"]
    → 写入 ws.cell(row=target_row, column=5)

核心逻辑

  • • col_name 作为桥梁:先从 row 中通过列名取出数据(row[col_name]),再写入到模板对应的列位置(col_idx
  • • 这样做的好处是:无论数据文件的列顺序如何,都能正确匹配到模板的列

示意图

row (数据文件一行)
    ├── row["产品名称"] = "充电器"  ──→ 写入第2列 (B列)
    ├── row["日期"] = "2024-01-01" ──→ 写入第1列 (A列)
    ├── row["单价"] = 6560         ──→ 写入第4列 (D列)
    └── ...

col_map 自动处理顺序转换

pd.isna() 判断空值

if not pd.isna(value):
    cell.value = value
  • • pd.isna(value) 返回 True 的情况:NoneNaNNaT(时间空值)
  • • 只有非空值才写入单元格
  • • 这样可以避免用空值覆盖已有的内容

ws.cell() 写入单元格

ws.cell(row=target_row, column=col_idx, value=value)

参数说明

  • • row:行号(从1开始),如 3 表示第3行
  • • column:列号(从1开始),如 2 表示第2列(B列)
  • • value:要写入的值

一句话总结ws.cell(row, column, value) 将 value 写入第 row 行、第 column 列的单元格。


第八步:保存文件

wb.save(OUTPUT)
print
(f"完成!→ {OUTPUT}")
print
(f"追加数据范围: 第{write_start_row}行 到 第{write_start_row + rows - 1}行")

输出结果

读取数据: 44行
模板现有数据: 最后一行是第2行
新数据将从第3行开始写入
列映射: {'日期': 1, '产品名称': 2, '销售员': 3, '单价': 4, '数量': 5}
追加写入新数据...
数据写入完成,共 44 行
完成!→ 追加数据后.xlsx
追加数据范围: 第3行 到 第46行

📚 核心知识点总结

1. 自动查找最后数据行

for row in range(ws.max_row, START_ROW - 1, -1):
    if
 any(cell.value is not None for cell in ws[row]):
        last_row = row
        break

else
:
    last_row = START_ROW - 1
  • • 从下往上找:跳过中间可能存在的空行,找到真正的最后一条数据
  • • any()函数:判断行中是否有非空单元格
  • • for...else结构:完全空白时设置保底值

2. 基于表头的列映射

headers = [cell.value for cell in ws[1]]
col_map = {}
for
 idx, header in enumerate(headers, start=1):
    if
 header in df.columns:
        col_map[header] = idx
  • • 读取模板第1行作为表头
  • • enumerate(start=1)让索引直接对应Excel列号
  • • 只映射同时存在的列,避免错误

3. 灵活的数据追加

target_row = write_start_row + i
value = row[col_name]  # 通过列名获取值
  • • 动态计算目标行号,支持任意数量的追加
  • • 通过列名获取值,而非固定位置,列顺序无关

4. 空值处理

if not pd.isna(value):
    cell.value = value
  • • 使用 pd.isna() 判断空值,兼容 NoneNaNNaT
  • • 避免用空值覆盖有效内容

🔄 核心流程图

读取数据文件 (pandas)
    ↓
加载模板 (openpyxl)
    ↓
从下往上查找最后数据行 ──→ 完全空白?──→ 起始行 = 2
    ↓                              ↓
找到最后行 = row              起始行 = 最后行 + 1
    ↓
读取模板表头,建立列映射
    ↓
遍历数据行 (df.iterrows())
    ↓
通过列映射找到对应的模板列
    ↓
非空值写入目标单元格
    ↓
保存文件 ✓

🗳️ 点单时间到! 🗳️

下期写什么?
你来定,我来写。


📦 资源获取提示

关注「码农自习室」,后台回复关键词 PythonExcel案例,即可获取本文完整代码及配套练习数据集,一起动手掌握高效数据操作的核心技巧!


❤️ 支持我们

如果本文对你有帮助,欢迎点赞 + 关注 + 点亮小红心,你的支持就是我们持续创作的最大动力~

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