Files

3.1 KiB
Raw Permalink Blame History

Day_13 · 文件读写与 JSON:让数据活到下次运行

预计耗时:25~30 分钟 程序一关,变量就没了。想让数据存下来(这就是"持久化",数据库干的事),先从文件开始。 Django 的数据库、缓存的本质,都是"把数据存起来再读回来"。

今日知识点

  • 写文件:with open("note.txt", "w") as f: f.write(内容)(w = 覆盖写)
  • 读文件:with open("note.txt", "r") as f: 内容 = f.read()
  • with 会自动关文件,不用手动 close
  • JSON:一种"把字典/列表变成文本"的格式,json.dumps 变文本、json.loads 变回数据
  • 为什么重要:HTTP 接口传输的数据、配置文件,全是 JSON 格式

先学(教程)

任务(后做)

新建 day13.py:

  1. 写入再读回:
    text = input("写一句话存起来:")
    with open("note.txt", "w", encoding="utf-8") as f:
        f.write(text)
    
    with open("note.txt", "r", encoding="utf-8") as f:
        content = f.read()
    print("读回来的是:", content)
    
    运行后确认同目录出现了 note.txt,且内容一致。(注意 encoding="utf-8",否则中文会乱码。)
  2. 用 JSON 存字典:
    import json
    
    user = {"name": "张三", "age": 18, "city": "青岛"}
    
    with open("user.json", "w", encoding="utf-8") as f:
        json.dump(user, f, ensure_ascii=False)   # ensure_ascii=False 让中文可读
    
    with open("user.json", "r", encoding="utf-8") as f:
        loaded = json.load(f)
    
    print(loaded["name"], loaded["age"])         # 从文件里还原的字典
    
  3. 进阶(加分):把 Day_5 的"三个用户列表"用 json.dump 存进 users.json, 再读回来遍历打印每个人的名字。

完成标准

  • note.txt 和 user.json 出现在同目录,读回内容一致
  • 能说出 json.dump 和 json.load 各是干嘛的
  • (进阶)用户列表存取成功

提交方式:把 day13.py 代码贴在当日工单评论里。

参考解答(先做再看)

text = input("写一句话存起来:")
with open("note.txt", "w", encoding="utf-8") as f:
    f.write(text)
with open("note.txt", "r", encoding="utf-8") as f:
    print("读回来的是:", f.read())

import json
user = {"name": "张三", "age": 18, "city": "青岛"}
with open("user.json", "w", encoding="utf-8") as f:
    json.dump(user, f, ensure_ascii=False)
with open("user.json", "r", encoding="utf-8") as f:
    loaded = json.load(f)
print(loaded["name"], loaded["age"])

# 进阶
users = [
    {"name": "张三", "age": 19},
    {"name": "李四", "age": 20},
    {"name": "王五", "age": 18},
]
with open("users.json", "w", encoding="utf-8") as f:
    json.dump(users, f, ensure_ascii=False)
with open("users.json", "r", encoding="utf-8") as f:
    for u in json.load(f):
        print(u["name"])