Python 文件读写
Python 文件操作 · 难度:进阶 · +15XP
Python 文件操作
文件操作是Python与外部数据交互的核心能力。Python通过内置的open()函数打开文件,配合模式参数控制读写方式。
打开文件的模式
| 模式 | 含义 | 文件不存在时 |
|---|---|---|
'r' | 只读(默认) | 报错 |
'w' | 写入(覆盖) | 创建新文件 |
'a' | 追加(追加到末尾) | 创建新文件 |
'x' | 创建(文件已存在则报错) | 创建新文件 |
'r+' | 读写(不创建) | 报错 |
'b' | 二进制模式 | 配合以上使用,如'rb'、'wb' |
基本读写操作
# 写文件
with open('data.txt', 'w', encoding='utf-8') as f:
f.write('第一行
')
f.write('第二行
')
f.writelines(['第三行
', '第四行
'])
# 读文件
with open('data.txt', 'r', encoding='utf-8') as f:
content = f.read() # 一次性读取全部
# 或者:
# lines = f.readlines() # 返回列表,每行一个元素
# line = f.readline() # 逐行读取
为什么用 with?
with 语句保证文件在操作完成后自动关闭,即使中间发生异常也不会忘记关闭文件。对比两种写法:
# 不推荐:可能忘记 close()
f = open('data.txt', 'r')
content = f.read()
f.close() # 容易被遗忘
# 推荐:with 自动关闭
with open('data.txt', 'r') as f:
content = f.read()
# 此处 f 已自动关闭
逐行读取大文件
# 大文件不能一次性 read(),逐行处理最安全
with open('big_file.txt', 'r', encoding='utf-8') as f:
for line in f: # 迭代器,每次只读一行到内存
line = line.strip()
if line:
print(line)
JSON 文件读写
import json
# 写入 JSON
data = {"name": "张三", "age": 25, "skills": ["Python", "SQL"]}
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# 读取 JSON
with open('data.json', 'r', encoding='utf-8') as f:
loaded = json.load(f)
print(loaded['name']) # 张三
实战练习
- 创建一个文本文件,写入5行古诗,然后逐行读取打印
- 写一个函数统计文件中某个关键词出现的次数
- 将学生成绩字典存入JSON文件,再读取回来
- 实现一个简单的日志写入函数,每次调用在文件末尾追加一行带时间戳的内容