文件 I/O
1. open 模式
| 模式 | 含义 |
|---|---|
"r" | 只读(默认) |
"w" | 写入(清空原内容) |
"a" | 追加 |
"x" | 排他创建(已存在则失败) |
"b" | 二进制(如 "rb"、"wb") |
"t" | 文本(默认) |
2. with 语句(推荐)
with 会在代码块结束时自动关闭文件,即使中间发生异常。
# 写入
with open("/tmp/hello.txt", "w", encoding="utf-8") as f:
f.write("第一行\\n")
f.write("第二行\\n")
# 读取
with open("/tmp/hello.txt", "r", encoding="utf-8") as f:
print(f.read())⚠️总是指定 encoding
跨平台文件读取务必带 encoding="utf-8",否则 Windows 默认 GBK 会让中文乱码。
3. 多种读取方式
with open("/tmp/poem.txt", "w", encoding="utf-8") as f:
f.write("床前明月光\\n疑是地上霜\\n举头望明月\\n低头思故乡\\n")
with open("/tmp/poem.txt", encoding="utf-8") as f:
print("--- read() ---")
print(f.read())
with open("/tmp/poem.txt", encoding="utf-8") as f:
print("--- readline() ---")
print(f.readline(), end="")
print(f.readline(), end="")
with open("/tmp/poem.txt", encoding="utf-8") as f:
print("--- readlines() ---")
print(f.readlines())4. JSON 读写
import json
data = {
"name": "Alice",
"age": 30,
"skills": ["Python", "Go", "Java"]
}
# 写入
with open("/tmp/user.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# 读取
with open("/tmp/user.json", encoding="utf-8") as f:
loaded = json.load(f)
print(loaded)
print(type(loaded["skills"]), loaded["skills"])💡ensure_ascii=False
默认 json.dump 会把中文转成 \uXXXX。设 ensure_ascii=False 保留中文字符。
5. CSV 读写
import csv
# 写入
rows = [
["name", "age", "city"],
["Alice", 30, "北京"],
["Bob", 25, "上海"],
]
with open("/tmp/people.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerows(rows)
# 读取
with open("/tmp/people.csv", encoding="utf-8", newline="") as f:
for row in csv.DictReader(f):
print(row)6. 路径处理 pathlib
from pathlib import Path
p = Path("/tmp") / "subdir" / "file.txt"
print(p)
print(p.name, p.suffix, p.parent)
# 创建目录
p.parent.mkdir(parents=True, exist_ok=True)
p.write_text("hello", encoding="utf-8")
print(p.exists(), p.read_text(encoding="utf-8"))🎯 综合实战
import json
from pathlib import Path
# 准备数据
students = [
{"name": "Alice", "scores": [85, 92, 78]},
{"name": "Bob", "scores": [90, 88, 95]},
{"name": "Carol", "scores": [76, 82, 80]},
]
# 写入 JSON
p = Path("/tmp/scores.json")
p.write_text(json.dumps(students, ensure_ascii=False, indent=2), encoding="utf-8")
# 读取并计算平均分
data = json.loads(p.read_text(encoding="utf-8"))
for s in data:
avg = sum(s["scores"]) / len(s["scores"])
print(f"{s['name']}: 平均 {avg:.1f}")小结
- ✅
open(path, mode, encoding="utf-8")打开文件 - ✅
with自动关闭 - ✅
read() / readline() / readlines()多种读法 - ✅
json.dump/load处理 JSON - ✅
csv.writer / DictReader处理 CSV - ✅
pathlib.Path面向对象地处理路径
🎉 Python 8 章完结!你已掌握 Python 的核心语法与常用库。接下来进入 Go 语言的学习。