乐于分享
好东西不私藏

使用openclaw制作python零基础教学-14

使用openclaw制作python零基础教学-14

零基础学Python:Day14!综合实战:打造个人待办事项管理器

恭喜你!坚持到了最后一天,我们已经学完了Python零基础的所有核心知识点,今天我们来做一个综合实战项目,把我们学过的所有知识点整合起来,打造一个属于你自己的个人待办事项管理器!

我们先回顾一下,十几天我们学了哪些知识点,今天都会用到:

  • 变量、数据类型、循环、条件判断
  • 函数定义和调用
  • 模块导入使用
  • 面向对象:类和对象、封装
  • 文件操作:读写文件保存数据

🏋️ 昨天作业参考答案

昨天Day13我们学习了文件操作,留了4道作业题,这里给大家参考一下实现思路和代码:

1. 创建一个文本文件hello.txt,写入三行文字,然后读取打印出来

# 写入三行文字with open("hello.txt""w", encoding="utf-8"as f:    f.write("Hello Python\n")    f.write("File Operation\n")    f.write("I love Python\n")# 读取内容打印with open("hello.txt""r", encoding="utf-8"as f:    content = f.read()print(content)

我们用w模式写入,再用r模式读取,with语句自动帮我们关闭文件。

2. 复制一个文本文件,把a.txt的内容复制到b.txt

def copy_file(source, target):with open(source, "r", encoding="utf-8"as f:        content = f.read()with open(target, "w", encoding="utf-8"as f:        f.write(content)# 使用:把a.txt复制到b.txtcopy_file("a.txt""b.txt")print("复制完成!")

思路很简单:先读取源文件全部内容,再写入目标文件。对于大文件,可以逐行复制,避免占用太多内存:

def copy_file_big(source, target):with open(source, "r", encoding="utf-8"as f1:with open(target, "w", encoding="utf-8"as f2:for line in f1:                f2.write(line)

3. 统计Python源代码文件一共有多少行代码(忽略空行)

def count_code_lines(filename):    count = 0with open(filename, "r", encoding="utf-8"as f:for line in f:# 去掉前后空白,如果剩下的不是空,说明不是空行if line.strip():                count += 1return countif __name__ == "__main__":    filename = "test.py"# 换成你要统计的文件名    lines = count_code_lines(filename)print(f"文件{filename}一共有 {lines} 行非空代码")

判断空行的核心是line.strip(),把一行前后的空白、换行都去掉之后,如果结果还是空字符串,说明这行就是空行,跳过不统计。

4. 拓展练习:把用户每次输入的内容追加写到日记文件里,用户输入exit退出

def diary_app():print("📝 简易日记程序,输入exit退出")with open("diary.txt""a", encoding="utf-8"as f:while True:            content = input("请输入日记内容:")if content.lower() == "exit":print("日记保存完成,再见!")break# 追加写入,换行            f.write(content + "\n")# 刷新缓冲区,保证内容立即写入文件            f.flush()if __name__ == "__main__":    diary_app()

这里我们用a追加模式打开文件,所以每次运行程序添加内容,原来的内容不会被覆盖,非常适合日记这种场景。


好了,昨天的作业就对完答案了,我们开始今天的综合实战项目吧!

我们要做的待办事项管理器,支持这些功能:

  1. 查看所有待办事项
  2. 添加新的待办事项
  3. 标记待办事项为已完成
  4. 删除待办事项
  5. 退出程序
  6. 数据保存到文件,程序退出再打开数据不丢失

📝 完整代码实现

我们用面向对象来实现,直接看完整代码,我会逐行给你讲解:

import jsonfrom pathlib import Pathclass Todo:"""单个待办事项"""def __init__(self, id, content, done=False):self.id = id# 唯一IDself.content = content    # 待办内容self.done = done          # 是否完成def __str__(self):# 显示待办,完成打✅,未完成打🔲        status = "✅" if self.done else "🔲"return f"{self.id}{status} {self.content}"class TodoManager:"""待办事项管理器,管理所有待办"""def __init__(self, filename="todos.json"):self.filename = filename  # 保存数据的文件self.todos = []          # 存储所有待办self.load_from_file()    # 从文件加载数据def next_id(self):"""生成下一个待办ID"""if not self.todos:return 1# 最大ID + 1return max(todo.id for todo in self.todos) + 1def load_from_file(self):"""从文件加载数据"""        path = Path(self.filename)if not path.exists():self.todos = []returnwith open(self.filename, "r", encoding="utf-8"as f:            data = json.load(f)self.todos = [Todo(**todo) for todo in data]def save_to_file(self):"""保存数据到文件"""# 把对象转成字典才能序列化        data = [            {"id": todo.id"content": todo.content, "done": todo.done}for todo in self.todos        ]with open(self.filename, "w", encoding="utf-8"as f:            json.dump(data, f, ensure_ascii=False, indent=2)def add_todo(self, content):"""添加新待办"""        todo = Todo(self.next_id(), content)self.todos.append(todo)self.save_to_file()print(f"✅ 添加待办成功:{content}")def list_todos(self):"""列出所有待办"""if not self.todos:print("📝 你还没有任何待办事项,快去添加吧~")returnprint("\n📝 你的待办事项:")for todo in self.todos:print(todo)print()def mark_done(self, todo_id):"""标记待办为已完成"""for todo in self.todos:if todo.id == todo_id:                todo.done = Trueself.save_to_file()print(f"🎉 标记已完成:{todo.content}")returnprint(f"❌ 没有找到ID为{todo_id}的待办")def delete_todo(self, todo_id):"""删除待办"""for i, todo in enumerate(self.todos):if todo.id == todo_id:                deleted = self.todos.pop(i)self.save_to_file()print(f"🗑️  删除成功:{deleted.content}")returnprint(f"❌ 没有找到ID为{todo_id}的待办")def run(self):"""运行程序,显示菜单"""print("🎉 欢迎使用个人待办事项管理器!")while True:print("\n===== 菜单 =====")print("1. 查看所有待办")print("2. 添加新待办")print("3. 标记已完成")print("4. 删除待办")print("5. 退出程序")            choice = input("请输入你的选择(1-5): ")if choice == "1":self.list_todos()elif choice == "2":                content = input("请输入待办内容: ")self.add_todo(content)elif choice == "3":try:                    todo_id = int(input("请输入要标记的待办ID: "))self.mark_done(todo_id)except ValueError:print("❌ 请输入合法的数字ID")elif choice == "4":try:                    todo_id = int(input("请输入要删除的待办ID: "))self.delete_todo(todo_id)except ValueError:print("❌ 请输入合法的数字ID")elif choice == "5":print("👋 再见,下次再用!")breakelse:print("❌ 输入不合法,请输入1-5之间的数字")if __name__ == "__main__":    manager = TodoManager()    manager.run()

👀 代码讲解

我们来拆分讲解一下这段代码都用到了哪些知识点,每一个细节都给你讲透:

1. 面向对象设计与封装思想

我们拆分了两个类:

  • Todo:负责单个待办事项的数据存储和字符串显示
  • TodoManager:负责管理所有待办,处理增删改查逻辑和数据持久化

这就是面向对象的封装思想

  • 每个类只负责自己单一职责,代码结构清晰,易于维护
  • 将数据和操作数据的方法绑定在一起,符合真实世界的逻辑
  • 降低代码耦合,修改一个类不会轻易影响另一个类

如果我们不用面向对象,所有逻辑都写在全局,代码会非常混乱,很难扩展功能。

2. 魔术方法__str__的作用

Todo类里我们重写了__str__方法:

def __str__(self):    status = "✅" if self.done else "🔲"return f"{self.id}{status} {self.content}"
  • 当我们print(todo)的时候,Python会自动调用对象的__str__方法,返回我们自定义的友好显示格式
  • 如果不重写,默认会输出类似<__main__.Todo object at 0x00000123>这样的对象内存地址,对用户不友好
  • 这就是面向对象多态的体现,不同类可以有自己不同的__str__实现

3. 列表推导式的简洁写法

加载数据的时候我们用到了这个写法:

self.todos = [Todo(**todo) for todo in data]

这就是列表推导式,是Python里非常简洁的创建列表的写法,等价于下面这段循环:

self.todos = []for todo in data:self.todos.append(Todo(**todo))

列表推导式比普通循环更简洁,运行效率也更高,适合这种从一个序列快速转换生成新列表的场景。除了列表推导式,Python还支持字典推导式和集合推导式,用法类似。

4. 字典解包**todo是什么?

上面的Todo(**todo)里,**是字典解包操作:

  • 我们从JSON读取出来的每个todo是一个字典,格式是{"id": 1, "content": "xxx", "done": false}
  • **todo会把字典的键值对自动展开成关键字参数传给Todo的构造函数
  • 等价于写Todo(id=todo["id"], content=todo["content"], done=todo["done"])
  • 如果字典的key和构造函数的参数名完全对应,用解包写法非常简洁
  • 类似的,*args是位置参数解包,**kwargs是关键字参数解包

5. 生成器表达式求最大值

我们在生成下一个ID的时候用到了:

return max(todo.id for todo in self.todos) + 1

这里todo.id for todo in self.todos是一个生成器表达式,它和列表推导式很像,但是不会一次性把所有结果都生成到内存里,而是迭代一个生成一个,对于大列表来说更省内存,这里用max()直接迭代就可以得到结果,非常优雅。

6. JSON数据存储详解

我们用JSON格式把数据保存到文件todos.json中,JSON是轻量级的数据交换格式,Python内置了json模块:

  • json.dump(data, f):把Python数据对象写入JSON文件
  • json.load(f):从JSON文件读取数据,解析成Python对象
  • ensure_ascii=False:默认JSON会把所有非ASCII字符转成\uXXXX编码,这个参数会让中文直接保存为UTF-8中文,方便查看
  • indent=2:按2个空格缩进格式化输出,让JSON文件更容易阅读,如果不写,会输出成一整行

为什么我们不直接保存Todo对象?因为JSON只能序列化基础数据类型(字典、列表、字符串、数字、布尔),不能直接序列化自定义类的对象,所以我们需要手动把每个Todo对象转成字典再保存。

7. 现代路径处理:pathlib

我们用pathlib.Path来处理文件路径:

path = Path(self.filename)if not path.exists():self.todos = []return

相比于传统的os.path.exists(self.filename)pathlib是面向对象的写法,更简洁,更易读,而且跨平台兼容性更好,自动处理Windows和macOS/Linux不同的路径分隔符,是现在Python官方推荐的路径处理方式,从Python 3.4开始就内置支持了。

8. with语句上下文管理器

我们所有文件操作都用了with语句:

with open(self.filename, "r", encoding="utf-8"as f:    data = json.load(f)

with是Python的上下文管理器,它会自动帮我们管理文件资源:

  • 进入with块的时候自动打开文件
  • 退出with块的时候自动关闭文件,不管代码是正常结束还是抛出异常,都会保证文件正确关闭
  • 不用我们手动写f.close(),不会忘记关闭文件导致资源泄漏,非常安全推荐

9. 无限主循环与菜单分支

程序主入口用了while True无限循环:

while True:# 显示菜单# 处理用户选择# 直到用户选择5退出才break

这是命令行交互程序最常用的结构:程序一直运行等待用户输入,直到用户主动选择退出。我们用if...elif...else对应用户不同的菜单选项,结构清晰。

10. 异常处理让程序更健壮

用户输入ID的时候,我们加了异常处理:

try:    todo_id = int(input("请输入要标记的待办ID: "))self.mark_done(todo_id)except ValueError:print("❌ 请输入合法的数字ID")

如果用户不小心输入了不是数字的内容(比如abc),int()转换会抛出ValueError异常,如果我们不捕获,程序会直接崩溃退出。加上异常处理之后,程序只会提示用户输入错误,不会崩溃,提升了用户体验,这就是健壮性

11. 列表的enumeratepop操作

删除待办的时候我们用到:

for i, todo in enumerate(self.todos):if todo.id == todo_id:        deleted = self.todos.pop(i)
  • enumerate()函数同时拿到列表的索引i和元素todo,这样我们找到要删除的元素之后,可以直接用pop(i)把对应索引的元素删除
  • pop()方法会把删除的元素返回给我们,所以我们可以打印出来告诉用户删除了哪个待办
  • 因为我们的待办ID是全局递增的,不会重复,所以找到第一个匹配的就可以直接返回了

12. if __name__ == "__main__":的作用

最后我们用了这个经典写法:

if __name__ == "__main__":    manager = TodoManager()    manager.run()

很多新手不理解这行到底干嘛的,记住两个作用:

  1. 当我们直接运行这个文件的时候(比如python todo.py),__name__变量会被自动设置为"__main__",所以这段代码会执行,启动程序
  2. 当我们把这个文件作为模块导入的时候(比如import todo),__name__会被设置为模块名"todo",所以这段代码不会执行,不会自动启动程序,方便我们在别的代码里导入这里面的类复用

这是Python里非常重要的一个习惯,几乎所有可执行的Python文件都会加上这行判断。


🎮 运行演示

我们来看一下运行效果:

🎉 欢迎使用个人待办事项管理器!===== 菜单 =====1. 查看所有待办2. 添加新待办3. 标记已完成4. 删除待办5. 退出程序请输入你的选择(1-5): 2请输入待办内容: 学习Python✅ 添加待办成功:学习Python===== 菜单 =====...请输入你的选择(1-5): 2请输入待办内容: 写作业✅ 添加待办成功:写作业===== 菜单 =====...请输入你的选择(1-5): 1📝 你的待办事项:1. 🔲 学习Python2. 🔲 写作业请输入你的选择(1-5): 3请输入要标记的待办ID: 1🎉 标记已完成:学习Python请输入你的选择(1-5): 1📝 你的待办事项:1. ✅ 学习Python2. 🔲 写作业

完美!所有功能都正常,退出程序再打开,数据还是存在的,因为我们保存到文件里了。

生成的todos.json文件内容大概是这样:

[{"id"1,"content""学习Python","done"true},{"id"2,"content""写作业","done"false}]

清晰易懂,方便查看。


✨ 你可以扩展的功能(附实现思路)

这个基础版本已经可以正常使用了,你可以自己动手扩展更多功能,练习学到的知识点,这里给你一些思路:

  1. 按状态筛选待办:只显示未完成或者只显示已完成

    • 实现思路:在菜单增加一个选项“6. 查看未完成待办”,遍历self.todos的时候只打印todo.done == False的待办就可以了
    • 知识点:条件过滤、循环遍历
  2. 编辑已存在的待办内容

    • 实现思路:增加一个菜单选项,让用户输入要编辑的ID,然后输入新内容,找到对应待办之后修改todo.content = 新内容,然后调用save_to_file()保存就好了
    • 知识点:对象属性修改、文件保存
  3. 给待办添加截止日期

    • 实现思路:在Todo类的构造函数里增加一个deadline参数,添加待办的时候让用户输入日期,然后保存的时候把日期也存进JSON里。显示的时候把截止日期也打印出来,还可以判断如果超过截止日期还没完成,可以标红提醒
    • 知识点:类结构扩展、日期处理,可以用Python内置的datetime模块处理日期比较
  4. 分类管理待办:分成工作/生活/学习等不同分类

    • 实现思路:给Todo增加一个category属性,添加的时候让用户选择分类,增加按分类筛选查看的功能
    • 知识点:属性扩展、过滤功能,可以让用户输入分类名,遍历只显示对应分类的待办
  5. 统计待办完成率

    • 实现思路:统计len(self.todos)是总数量,统计sum(1 for todo in self.todos if todo.done)是已完成数量,然后计算完成率打印出来,还可以告诉你未完成有多少个
    • 知识点:生成器表达式、统计计算
  6. 搜索待办:按关键词搜索待办内容

    • 实现思路:让用户输入关键词,遍历所有待办,判断关键词 in todo.content,把包含关键词的结果打印出来
    • 知识点:字符串成员运算、过滤

动手改造一下,把它变成你自己专属的待办管理器吧!每改一点就运行试一下,慢慢你就会越来越熟练~


🎉 恭喜你完成了零基础教程!

回顾一下,我们14天学了这些内容:

  • Day1:环境搭建,第一个Python程序
  • Day2:变量和基本数据类型
  • Day3:条件判断if语句
  • Day4:循环for和while
  • Day5:列表和字典
  • Day6:函数定义和使用
  • Day7:字符串常用操作
  • Day8:异常处理try...except
  • Day9:模块和包的使用
  • Day10:常用标准模块介绍
  • Day11:面向对象入门:类和对象
  • Day12:面向对象进阶:魔法方法、属性
  • Day13:文件操作与IO
  • Day14:综合实战项目

从完全零基础,到能自己写一个完整可运行的实用项目,你已经跨出了最关键的一步!

编程是练出来的,不是看出来的,一定要多写代码,多做项目,遇到问题多搜索多思考,你很快就能成为Python高手!

最后,如果这个教程对你有帮助,欢迎分享给更多想要学习Python的朋友~

Happy Coding! 👨‍💻👩‍💻

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-03 13:16:55 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/497025.html
  2. 运行时间 : 0.104825s [ 吞吐率:9.54req/s ] 内存消耗:4,849.70kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=b6f6b4e3617195f62d61262b41d2c2e8
  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.80 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000604s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000817s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000352s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000260s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000499s ]
  6. SELECT * FROM `set` [ RunTime:0.000215s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000641s ]
  8. SELECT * FROM `article` WHERE `id` = 497025 LIMIT 1 [ RunTime:0.000492s ]
  9. UPDATE `article` SET `lasttime` = 1775193415 WHERE `id` = 497025 [ RunTime:0.004234s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000259s ]
  11. SELECT * FROM `article` WHERE `id` < 497025 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000408s ]
  12. SELECT * FROM `article` WHERE `id` > 497025 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000354s ]
  13. SELECT * FROM `article` WHERE `id` < 497025 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001395s ]
  14. SELECT * FROM `article` WHERE `id` < 497025 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.007995s ]
  15. SELECT * FROM `article` WHERE `id` < 497025 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.011054s ]
0.106508s