当前位置:首页>Excel>Python 玩转 Excel 案例【第 2 期】

Python 玩转 Excel 案例【第 2 期】

  • 2026-04-04 14:25:39
Python 玩转 Excel 案例【第 2 期】

Python 玩转 Excel 案例【第 2 期】

大家好!今天我们来学习一个实用的Python小案例:如何批量处理Excel文件并合并数据。

案例背景

假设我们有这样一个需求:在一个"销售表"文件夹中,存放着多个Excel文件,每个文件可能包含多个工作表。我们需要将所有数据合并到一个文件中,并添加来源信息。

代码实现

1. 导入必要的库

import logging
from
 pathlib import Path
from
 typing import List, Optional, Dict
import
 pandas as pd

代码解释:

  • • logging:Python的日志模块,用于记录程序运行信息
  • • pathlib.Path:面向对象的文件路径处理模块
  • • typing:提供类型注解支持,让代码更规范
  • • pandas as pd:数据分析核心库,处理Excel文件的神器

2. 配置日志系统

# 配置日志
logging.basicConfig(level=logging.INFO,
                   format
='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

代码解释:

  • • level=logging.INFO:设置日志级别为INFO,只记录INFO及以上级别的信息
  • • format:定义日志输出格式,包含时间、级别和消息内容
  • • logger:创建当前模块的日志记录器

执行结果:

日志系统配置完成,后续运行时会看到类似信息:
2026-03-05 20:30:25 - INFO - 开始处理文件夹: 销售表

💡 小Tip:使用logging替代print的好处是:

  • • 可以控制日志输出级别
  • • 自动添加时间戳
  • • 方便后续将日志输出到文件

核心函数详解

函数一:读取Excel文件

def read_excel_files(folder_path: str, sheet_name: Optional[str] = None) -> List[pd.DataFrame]:
    """
    读取文件夹中的所有Excel文件

    Args:
        folder_path: 文件夹路径
        sheet_name: 指定的工作表名称,如果为None则读取所有工作表

    Returns:
        包含所有数据的数据框列表
    """

    try
:
        folder = Path(folder_path)
        if
 not folder.exists():
            raise
 FileNotFoundError(f"文件夹不存在: {folder_path}")

        dataframes = []
        for
 file_path in folder.glob('*.xlsx*'):
            try
:
                logger.info(f"正在读取文件: {file_path.name}")

                # 读取Excel文件

                if
 sheet_name:
                    df = pd.read_excel(file_path, sheet_name=sheet_name)
                    # 添加文件名和工作表名信息

                    df['文件名'] = file_path.stem
                    df['工作表名'] = sheet_name
                    dataframes.append(df)
                else
:
                    # 读取所有工作表

                    sheets = pd.read_excel(file_path, sheet_name=None)
                    for
 sheet_name_inner, sheet_df in sheets.items():
                        sheet_df['文件名'] = file_path.stem
                        sheet_df['工作表名'] = sheet_name_inner
                        dataframes.append(sheet_df)

            except
 Exception as e:
                logger.error(f"读取文件 {file_path.name} 失败: {str(e)}")
                continue


        return
 dataframes

    except
 Exception as e:
        logger.error(f"读取文件夹失败: {str(e)}")
        raise

知识点详解

1. 函数定义与类型注解

  • • def:定义函数的关键字
  • • folder_path: str:参数类型注解,表示文件夹路径为字符串
  • • sheet_name: Optional[str] = None:这个参数可以接收字符串或None,如果不传值则默认为None
  • • Optional的作用:告诉代码阅读者和类型检查工具,这个参数可以是字符串,也可以是None
  • • Optional[str] 中的[ ]不是列表的意思,而是告诉Optional"我要包装的是字符串类型"
  • • -> List[pd.DataFrame]:返回值类型注解,返回DataFrame列表

2. 文档字符串

  • • 函数说明文档,清晰描述函数功能、参数和返回值
  • • 使用三个引号包裹,可以换行
  • • Args部分说明每个参数的作用
  • • Returns部分说明返回值

3. 异常处理结构

  • • 外层try:捕获文件夹级别的错误
  • • 内层try:捕获单个文件处理时的错误
  • • 这样即使某个文件出错,也不会影响其他文件的处理

4. 文件路径处理

  • • Path(folder_path):将字符串路径转换为Path对象
  • • folder.exists():检查文件夹是否存在
  • • folder.glob('*.xlsx*'):使用通配符查找所有Excel文件
  • • file_path.name:获取文件名(带扩展名)
  • • file_path.stem:获取文件名(不含扩展名)

Path对象属性一览表:

属性
示例值
说明
stem销售数据_01
文件名(不含扩展名)
name销售数据_01.xlsx
完整文件名
suffix.xlsx
扩展名(含点号)
parent销售表
父目录

5. 读取Excel文件的两种模式

  • • 模式1(指定工作表):pd.read_excel(file_path, sheet_name=sheet_name),返回DataFrame
  • • 模式2(所有工作表):pd.read_excel(file_path, sheet_name=None),返回字典
    • • 字典的键是工作表名
    • • 字典的值是对应工作表的DataFrame
  • • for sheet_name_inner, sheet_df in sheets.items():遍历所有工作表

sheet_name=None时,返回的sheets的数据结构:

sheets = {
    '工作表名1'
: DataFrame1,  # 第一个工作表的数据
    '工作表名2'
: DataFrame2,  # 第二个工作表的数据
    '工作表名3'
: DataFrame3,  # 第三个工作表的数据
    ...
}

6. 添加来源信息

  • • df['文件名'] = file_path.stem:新增"文件名"列
  • • df['工作表名'] = sheet_namesheet_name_inner:新增"工作表名"列
  • • 这样合并后可以追踪每条数据的来源

7. 异常处理与继续执行

  • • except Exception as e:捕获所有类型的异常
  • • logger.error():记录错误日志
  • • continue:跳过当前文件,继续处理下一个文件
  • • raise:重新抛出异常,让上层调用者知道程序失败了

函数二:合并数据

def merge_excel_data(dataframes: List[pd.DataFrame], 
                     selected_columns: Optional[List[str]] = None,
                     new_column_names: Optional[Dict[str, str]] = None
) -> pd.DataFrame:
    """
    合并多个DataFrame并进行列处理

    Args:
        dataframes: 要合并的DataFrame列表
        selected_columns: 需要保留的列名列表
        new_column_names: 列名重命名字典,格式:{原列名: 新列名}

    Returns:
        合并处理后的DataFrame
    """

    try
:
        if
 not dataframes:
            logger.warning("没有数据可合并")
            return
 pd.DataFrame()

        # 合并所有数据

        merged_df = pd.concat(dataframes, ignore_index=True)
        logger.info(f"合并完成,总行数: {len(merged_df)}")

        # 选择指定列

        if
 selected_columns:
            available_cols = [col for col in selected_columns if col in merged_df.columns]
            merged_df = merged_df[available_cols]
            logger.info(f"选择了列: {available_cols}")

        # 重命名列

        if
 new_column_names:
            merged_df = merged_df.rename(columns=new_column_names)
            logger.info(f"重命名列: {new_column_names}")

        return
 merged_df

    except
 Exception as e:
        logger.error(f"合并数据失败: {str(e)}")
        raise

知识点详解

1. 参数说明

  • • dataframes: List[pd.DataFrame]:要合并的DataFrame列表
  • • selected_columns: Optional[List[str]] = None:可选,需要保留的列名列表
  • • new_column_names: Optional[Dict[str, str]] = None:可选,列名重命名字典

2. 空数据检查

  • • if not dataframes:检查是否有数据
  • • 返回空DataFrame而不是None,确保调用者总能得到DataFrame对象
  • • 空DataFrame也可以用df.empty来判断

3. 数据合并

  • • pd.concat(dataframes, ignore_index=True):合并所有DataFrame
  • • ignore_index=True:重新生成索引
  • • len(merged_df):获取合并后的总行数

4. 列选择与列表推导式

  • • if selected_columns:如果传入了需要选择的列
  • • available_cols = [col for col in selected_columns if col in merged_df.columns]:这是一个列表推导式
    • • 遍历selected_columns中的每个列名
    • • 只保留在merged_df中实际存在的列
    • • 避免因列不存在而报错
  • • merged_df[available_cols]:只保留选中的列
    列表推导式详解:
# 语法:[表达式 for 变量 in 可迭代对象 if 条件]

# 等价写法:

available_cols = []
for
 col in selected_columns:
    if
 col in merged_df.columns:
        available_cols.append(col)

5. 列重命名

  • • rename(columns=new_column_names):重命名列
  • • new_column_names:字典格式,{原列名: 新列名}
  • • 只重命名指定的列,其他列保持不变
  • • 如果指定的原列名不存在,pandas会忽略

函数三:主处理函数

def process_excel_files(input_folder: str
                       output_file: str,
                       sheet_name: Optional[str] = None,
                       selected_columns: Optional[List[str]] = None,
                       new_column_names: Optional[Dict[str, str]] = None
) -> bool:
    """
    主处理函数:读取、合并、保存Excel文件

    Args:
        input_folder: 输入文件夹路径
        output_file: 输出文件路径
        sheet_name: 指定的工作表名称
        selected_columns: 需要保留的列名列表
        new_column_names: 列名重命名字典

    Returns:
        bool: 处理是否成功
    """

    try
:
        logger.info(f"开始处理文件夹: {input_folder}")

        # 1. 读取所有Excel文件

        dataframes = read_excel_files(input_folder, sheet_name)

        # 2. 合并数据

        merged_df = merge_excel_data(dataframes, selected_columns, new_column_names)

        if
 merged_df.empty:
            logger.warning("没有数据被处理")
            return
 False

        # 3. 保存结果

        merged_df.to_excel(output_file, index=False)
        logger.info(f"结果已保存到: {output_file}")
        logger.info(f"共处理了 {len(dataframes)} 个数据表,最终数据 {len(merged_df)} 行")

        return
 True

    except
 Exception as e:
        logger.error(f"处理失败: {str(e)}")
        return
 False

知识点详解

1. 函数定义

  • • input_folder: str:输入文件夹路径
  • • output_file: str:输出文件路径
  • • -> bool:返回值类型是布尔值,表示处理是否成功

2. 三步走流程

  • • 第1步:调用read_excel_files读取所有Excel文件
  • • 第2步:调用merge_excel_data合并数据
  • • 第3步:保存结果到Excel文件

3. 结果检查

  • • merged_df.empty:判断DataFrame是否为空
  • • 如果为空,记录警告并返回False

4. 保存文件

  • • to_excel(output_file, index=False):保存为Excel文件
  • • index=False:不保存行索引
  • • len(dataframes):总共读取了多少个数据表
  • • len(merged_df):合并后总共多少行数据

5. 返回值

  • • True:处理成功
  • • False:处理失败或无数据

4. 使用示例

if __name__ == "__main__":
    # 示例1:基本使用 - 读取所有工作表

    success = process_excel_files(
        input_folder="销售表",
        output_file="day2-result.xlsx",
        sheet_name=None,  # 读取所有工作表
        selected_columns=["文件名", "工作表名", "店名", "品牌", "型号", "数量"],
        new_column_names={"文件名": "来源文件", "工作表名": "来源工作表"}
    )

    if
 success:
        logger.info("处理完成")
    else
:
        logger.error("处理失败")

知识点详解

1. if __name__ == "__main__":

  • • 确保直接运行时才执行
  • • 被其他文件导入时不执行

2. 函数调用

  • • 使用关键字参数,清晰明了
  • • 传入所有配置参数
  • • 接收返回值判断处理结果

3. 参数灵活性

  • • 可以根据需要调整参数
  • • 例如只读取指定工作表、只保留部分列等

运行效果演示

执行代码后,你会看到类似这样的输出:

2026-03-05 20:30:25 - INFO - 开始处理文件夹: 销售表
2026-03-05 20:30:25 - INFO - 正在读取文件: 销售数据_01.xlsx
2026-03-05 20:30:26 - INFO - 正在读取文件: 销售数据_02.xlsx
2026-03-05 20:30:26 - INFO - 正在读取文件: 销售数据_03.xlsx
2026-03-05 20:30:27 - INFO - 合并完成,总行数: 156
2026-03-05 20:30:27 - INFO - 选择了列: ['文件名', '工作表名', '店名', '品牌', '型号', '数量']
2026-03-05 20:30:27 - INFO - 重命名列: {'文件名': '来源文件', '工作表名': '来源工作表'}
2026-03-05 20:30:28 - INFO - 结果已保存到: day2-result.xlsx
2026-03-05 20:30:28 - INFO - 共处理了 8 个数据表,最终数据 156 行
2026-03-05 20:30:28 - INFO - 处理完成

最终生成的Excel文件内容示例:

来源文件
来源工作表
店名
品牌
型号
数量
销售数据_01
1月销售
北京店
苹果
iPhone 15
5
销售数据_01
1月销售
上海店
华为
Mate 60
3
销售数据_02
2月销售
广州店
小米
Redmi
8

总结

通过这个案例,我们学会了:

  1. 1. ✅ 使用pandas批量读取Excel文件
  2. 2. ✅ 处理多工作表文件
  3. 3. ✅ 灵活选择和重命名列
  4. 4. ✅ 添加来源信息追踪数据
  5. 5. ✅ 使用logging记录程序运行状态

📦 资源获取提示

关注「码农自习室」,后台回复关键词 PythonExcel案例,即可获取本文完整代码及所有示例数据集,动手实践批量处理Excel的技巧!


❤️ 支持我们

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

最新文章

随机文章

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