1. 数据的“保质期”:临时变量 vs 持久存储 🕒
关键字
:持久存储、文件操作 内容详解: 之前写代码,数据存在变量里(比如
name = "张三"
),但程序一关,数据就没了——这是“临时存储”。如果想让数据
长期保存
(比如Web应用的日志、用户提交的信息),得存在
文件
里(这是“持久存储”)。 类比:临时变量像“写在草稿纸上的笔记”,一揉就没;文件存储像“写在笔记本里的内容”,能长期保存~
二、文件操作:Python读写文件的“基础姿势”
2. 文件操作入门:打开、读写、关闭——像用“电子笔记本” ✍️
关键字
:文件打开、读写模式、close() 内容详解: Python操作文件分三步:
打开→读写→关闭
,比如写一个“记录日志”的功能:
# 1. 打开文件:模式"w"(写),如果文件不存在会新建
file = open("log.txt", "w", encoding="utf-8")
# 2. 写内容到文件
file.write("2025-11-09 有人访问了网站!\n")
# 3. 关闭文件(必须关,否则数据可能没存上)
file.close()
读文件也很简单:
# 打开文件:模式"r"(读)
file = open("log.txt", "r", encoding="utf-8")
# 读所有内容
content = file.read()
print("文件内容:", content)
file.close()
常用模式:
"w"
(覆盖写)、
"a"
(追加写)、
"r"
(读)——选对模式才不会丢数据!
三、更优雅的文件操作:with语句“自动关文件”
3. 进阶:with语句——不用手动关文件的“懒人技巧” 🛌
关键字
:with语句、上下文管理器 内容详解: 手动
close()
容易忘(比如程序崩溃没关文件),用
with语句
能“自动关闭文件”,更安全优雅:
# with会自动管理文件:代码块结束后自动close()
with open("log.txt", "a", encoding="utf-8") as file:
file.write("2025-11-09 又有人访问了网站!\n")
# 不用写close(),超方便!
这是Python的“上下文管理器”功能——帮你自动处理“资源打开/关闭”的琐事,新手一定要用它!
四、实战:Web应用的日志记录——把用户操作存下来
4. 实战:给Web应用加“日志功能”——记录用户行为 📝
关键字
:Web日志、文件追加写、数据格式化 内容详解: 结合第5章的Flask Web应用,给它加“日志功能”——记录用户的访问时间、IP、操作:
from flask import Flask, request
import datetime # 导入时间模块
app = Flask(__name__)
# 访问首页时,记录日志
@app.route("/")
def home():
# 获取当前时间
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 获取用户IP
user_ip = request.remote_addr
# 日志内容
log_content = f"{now} - IP:{user_ip} - 访问了首页\n"
# 追加写日志到文件
with open("web_log.txt", "a", encoding="utf-8") as f:
f.write(log_content)
return "首页(已记录日志)"
if __name__ == "__main__":
app.run(debug=True)
每次有人访问首页,
web_log.txt
里就会多一条记录——比如:
2025-11-09 15:30:00 - IP:127.0.0.1 - 访问了首页
。
五、数据展示:把文件里的日志变成“好看的网页”
5. 数据展示:日志变网页——用Jinja2渲染可读内容 🎨
关键字
:Jinja2模板、数据渲染、HTML格式化 内容详解: 日志存在文件里是“纯文本”,不好看,用Flask的Jinja2模板把它变成“好看的网页”:
- 第一步:写“查看日志”的视图函数 @app.route(“/show_log”) def show_log():
读取日志文件内容
with open(“web_log.txt”, “r”, encoding=“utf-8”) as f:
按行分割成列表
logs = f.readlines()
把日志列表传给模板
return render_template(“log_page.html”, logs=logs)
2. 第二步:写模板templates/log_page.html
Web应用访问日志
-
{% for log in logs %} Jinja2的循环语法
- {{ log }} 逐行显示日志 {% endfor %}
现在访问
http://127.0.0.1:5000/show_log
,就能看到“带格式的日志列表”——数据不仅能存,还能“好看地展示”!
六、现实延伸:文件存储的“局限性”与下一步
6. 划重点:文件存储的“坑”与进阶方向 🚧
关键字
:文件存储局限、数据库 内容详解: 文件存储适合“简单、小规模数据”,但有局限:
- ❌ 数据多了,读写速度慢;
- ❌ 没法快速“查询”(比如找“某IP的所有访问记录”,得逐行读文件);
- ❌ 并发读写容易出错(多个用户同时写文件,可能丢数据)。
所以复杂应用要用到
数据库
(比如MySQL、SQLite)——这是“更专业的持久存储工具”,能解决文件存储的这些问题~
要不要我帮你整理一份
文件操作+Web日志功能的核心代码清单
?