Files
DailyChallenge_ProgrammingD…/Day_13/README.md
T

90 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 格式
## 先学(教程)
- 菜鸟教程("文件方法"一节,看 open/read/write 即可):https://www.runoob.com/python3/python3-file-methods.html
- 菜鸟教程("JSON"一节):https://www.runoob.com/python3/python3-json.html
- B站黑马教程(看讲"文件操作"的几集):https://www.bilibili.com/video/BV1qW4y1a7fU/
## 任务(后做)
新建 `day13.py`:
1. 写入再读回:
```python
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 存字典:
```python
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` 代码贴在当日工单评论里。
## 参考解答(先做再看)
```python
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"])
```