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模板把它变成“好看的网页”:

  1. 第一步:写“查看日志”的视图函数 @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日志功能的核心代码清单