当前位置:首页>python>【一起学 Python】第 63 天:文件 I/O 进阶:写入模式与编码安全

【一起学 Python】第 63 天:文件 I/O 进阶:写入模式与编码安全

  • 2026-04-13 12:57:45
【一起学 Python】第 63 天:文件 I/O 进阶:写入模式与编码安全

欢迎来到 Python 学习计划的第 63 天!🎉

昨天我们学习了 文件读取 (open() 与 read()),掌握了如何安全地获取外部数据。今天,我们将学习如何将数据安全、正确地写入文件

写入操作比读取更危险,因为它可能覆盖现有数据或导致编码乱码。掌握写入模式、编码处理和原子写入技巧,是工程化开发的基本功!

一、文件写入模式详解

1. 核心写入模式

模式

说明

文件不存在

文件存在

指针位置

"w"

文本写入

创建

覆盖清空

开头

"a"

文本追加

创建

保留内容,末尾追加

末尾

"x"

独占创建

创建

报错 (FileExistsError)

开头

"wb"

二进制写入

创建

覆盖清空

开头

2. 模式选择指南
# ✅ 覆盖写入(配置文件更新)with open("config.json""w", encoding="utf-8"as f:    f.write("{\"key\": \"value\"}")# ✅ 追加写入(日志记录)with open("app.log""a", encoding="utf-8"as f:    f.write("2024-01-01 12:00:00 INFO Start\n")# ✅ 安全创建(防止意外覆盖)try:    with open("important.txt""x", encoding="utf-8"as f:        f.write("重要数据")except FileExistsError:    print("文件已存在,避免覆盖!")
💡 最佳实践:默认使用 "w" 模式时务必小心,重要数据建议先用 "x" 检查或使用临时文件。

二、写入方法对比

1. write() - 写入字符串

with open("data.txt""w", encoding="utf-8"as f:    f.write("第一行\n")      # 需要手动添加换行符    f.write("第二行\n")

2. writelines() - 写入字符串列表

lines = ["第一行\n""第二行\n""第三行\n"]with open("data.txt""w", encoding="utf-8"as f:    f.writelines(lines)     # 不会自动添加换行符

3. 方法对比表

方法

参数类型

换行符

适用场景

write()

str

需手动添加

少量数据,精确控制

writelines()

list[str]

需手动添加

批量写入行数据

print()

任意

自动添加

快速调试(重定向)

# 使用 print 写入文件(较少用,但可行)with open("output.txt""w", encoding="utf-8"as f:    print("Hello""World", file=f)  # 自动添加换行

三、编码问题与处理(核心)

1. 为什么会出现乱码?

  • 写入编码 ≠ 读取编码
  • 不同操作系统的默认编码不同(Windows 通常是 gbk,Linux/Mac 通常是 utf-8)。

2. 最佳实践:统一使用 UTF-8

# ❌ 风险:依赖系统默认编码with open("data.txt""w"as f:    f.write("中文内容")# ✅ 安全:显式指定 UTF-8with open("data.txt""w", encoding="utf-8"as f:    f.write("中文内容")

3. 编码错误处理策略

errors 参数控制遇到无法编码字符时的行为。

策略

说明

示例

"strict"

抛出异常(默认)

encoding="utf-8", errors="strict"

"ignore"

忽略错误字符

errors="ignore"

"replace"

用 ? 替换错误字符

errors="replace"

"xmlcharrefreplace"

用 XML 字符引用替换

errors="xmlcharrefreplace"

# 处理可能包含特殊字符的数据try:    with open("output.txt""w", encoding="utf-8", errors="strict"as f:        f.write("正常内容 \udcff")  # 无效 Unicodeexcept UnicodeEncodeError as e:    print(f"编码错误:{e}")

四、换行符处理

1. 跨平台差异

  • Windows\r\n
  • Linux/Mac\n
  • Old Mac\r

2. Python 的自动转换

默认情况下,Python 在文本模式下会自动转换换行符。

# Windows 上写入 \n,实际存储为 \r\nwith open("test.txt""w"as f:    f.write("Line1\nLine2")# 禁用自动转换(二进制模式或 newline="")with open("test.txt""w", newline=""as f:    f.write("Line1\nLine2")  # 保持原样

💡 建议:处理 CSV 或需要精确控制换行符的文件时,使用 newline=""

五、OOP 实战应用(结合知识库)

结合 异常处理(参考 [File 89-92](92-异常链 (raise ... from ...).md))、类设计(参考 [File 67](67-实例方法与 self 的本质.md)、[File 66](66-类属性 vs 实例属性的区别.md))和 类型提示(参考 [File 85](85-Python 3.10+ 新语法:联合类型.md)),构建健壮的文件写入类。

1. 安全文件写入器

from pathlib import Pathfrom typing import Unionclass FileWriteError(Exception):    """文件写入错误"""    passclass SafeFileWriter:    """安全文件写入器,支持原子写入"""    def __init__(self, filepath: Union[str, Path], encoding: str = "utf-8"):        self.filepath = Path(filepath)        self.encoding = encoding    def write(self, content: str, mode: str = "w") -> None:        """写入内容"""        try:            # 确保父目录存在            self.filepath.parent.mkdir(parents=True, exist_ok=True)            with open(self.filepath, mode, encoding=self.encoding) as f:                f.write(content)        except OSError as e:            # 异常链:保留原始错误信息            raise FileWriteError(f"写入失败:{self.filepath}"from e    def write_lines(self, lines: list[str], append: bool = False) -> None:        """写入多行"""        mode = "a" if append else "w"        content = "\n".join(lines)        self.write(content, mode=mode)    def write_safe(self, content: str) -> None:        """原子写入:先写临时文件,再重命名"""        temp_path = self.filepath.with_suffix(self.filepath.suffix + ".tmp")        try:            # 1. 写入临时文件            with open(temp_path, "w", encoding=self.encoding) as f:                f.write(content)            # 2. 原子替换(Windows 可能需要额外处理)            temp_path.replace(self.filepath)        except Exception as e:            # 清理临时文件            if temp_path.exists():                temp_path.unlink()            raise FileWriteError("原子写入失败"from e        finally:            # 确保临时文件被清理            if temp_path.exists():                try:                    temp_path.unlink()                except:                    pass# 使用writer = SafeFileWriter("data/config.json")writer.write('{"key": "value"}')writer.write_safe("重要数据,防止损坏")

2. 日志记录器

import datetimefrom typing import Optionalclass Logger:    """简单日志记录器"""    def __init__(self, filepath: str, encoding: str = "utf-8"):        self.filepath = filepath        self.encoding = encoding    def log(self, message: str, level: str = "INFO") -> None:        """记录日志"""        timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")        log_line = f"[{timestamp}] [{level}{message}\n"        try:            # 使用追加模式            with open(self.filepath, "a", encoding=self.encoding) as f:                f.write(log_line)        except OSError as e:            # 日志写入失败不应影响主程序            print(f"日志写入失败:{e}")    def clear(self) -> None:        """清空日志"""        with open(self.filepath, "w", encoding=self.encoding) as f:            pass# 使用logger = Logger("app.log")logger.log("系统启动")logger.log("发生错误", level="ERROR")

3. 配置保存器

import jsonfrom typing import Anyclass ConfigSaver:    """配置文件保存器"""    def __init__(self, filepath: str):        self.filepath = filepath        self.default_config: dict[strAny] = {            "version""1.0",            "debug"False        }    def save(self, config: dict[strAny]) -> None:        """保存配置为 JSON"""        try:            with open(self.filepath, "w", encoding="utf-8"as f:                # indent 美化输出                json.dump(config, f, indent=2, ensure_ascii=False)        except TypeError as e:            raise ValueError("配置数据无法序列化"from e        except OSError as e:            raise IOError(f"无法写入配置文件:{self.filepath}"from e    def save_backup(self, config: dict[strAny]) -> None:        """保存配置并创建备份"""        import shutil        from pathlib import Path        path = Path(self.filepath)        if path.exists():            backup_path = path.with_suffix(path.suffix + ".bak")            shutil.copy2(path, backup_path)        self.save(config)# 使用saver = ConfigSaver("config.json")saver.save({"theme""dark""language""zh"})

六、常见误区与注意事项

1. 忘记关闭文件

# ❌ 危险:数据可能丢失f = open("data.txt""w")f.write("content")# 如果程序崩溃,内容可能未写入磁盘# ✅ 安全:使用 withwith open("data.txt""w"as f:    f.write("content")

2. 覆盖重要文件

# ❌ 危险:直接覆盖with open("database.db""w"as f:    f.write(new_data)# ✅ 安全:先备份或原子写入import shutilshutil.copy("database.db""database.db.bak")# 然后写入

3. 编码不一致

# ❌ 写入 UTF-8,读取 GBKwith open("data.txt""w", encoding="utf-8"as f:    f.write("中文")with open("data.txt""r", encoding="gbk"as f:  # 乱码!    print(f.read())

4. 路径问题

# ❌ 硬编码路径open("C:\\Users\\data\\file.txt""w")# ✅ 使用 pathlibfrom pathlib import Pathpath = Path("data") / "file.txt"path.parent.mkdir(exist_ok=True)with open(path, "w"as f:    f.write("content")

七、总结

知识点

说明

写入模式

"w" 覆盖,"a" 追加,"x" 独占创建

写入方法

write() 写字符串,writelines() 写列表

编码

始终显式指定 encoding="utf-8"

换行符

文本模式自动转换,newline="" 禁用

安全写入

使用 with,重要数据用临时文件 + 重命名

异常处理

捕获 OSErrorUnicodeEncodeError

核心要点

  1. 始终指定编码,避免跨平台乱码。
  2. 慎用 "w" 模式,防止意外覆盖重要数据。
  3. 使用 with 语句,确保文件正确关闭。
  4. 重要数据原子写入,先写临时文件再替换。

📌 明日预告:上下文管理器 with 语句的深度解析

明天我们将进入 异常与文件模块最后一天

  • 主题:上下文管理器 with 语句的深度解析
  • 核心问题
    1. with 语句的底层原理是什么?
    2. __enter__ 和 __exit__ 方法的作用?
    3. 如何自定义上下文管理器?
    4. contextlib 模块有哪些实用工具?
    5. 除了文件,with 还能管理什么资源?

💡 提前思考

  1. with open(...) as f: 背后执行了什么代码?
  2. 如果 with 块中发生异常,__exit__ 会收到什么信息?
  3. 如何用类实现一个自定义的计时器上下文管理器?

掌握文件写入,是数据持久化的关键!明天深入理解 with 的魔法!继续加油!🚀

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-15 04:39:32 HTTP/2.0 GET : https://f.mffb.com.cn/a/486226.html
  2. 运行时间 : 0.086481s [ 吞吐率:11.56req/s ] 内存消耗:4,716.38kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=ff9f43b47eb959b705e7f271ba84d1ea
  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.000429s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000667s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000306s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000292s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000551s ]
  6. SELECT * FROM `set` [ RunTime:0.000208s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000555s ]
  8. SELECT * FROM `article` WHERE `id` = 486226 LIMIT 1 [ RunTime:0.000442s ]
  9. UPDATE `article` SET `lasttime` = 1776199172 WHERE `id` = 486226 [ RunTime:0.009515s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000308s ]
  11. SELECT * FROM `article` WHERE `id` < 486226 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000603s ]
  12. SELECT * FROM `article` WHERE `id` > 486226 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000444s ]
  13. SELECT * FROM `article` WHERE `id` < 486226 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.004213s ]
  14. SELECT * FROM `article` WHERE `id` < 486226 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001178s ]
  15. SELECT * FROM `article` WHERE `id` < 486226 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000873s ]
0.088008s