“辛苦写的学生成绩统计代码,关掉程序数据就没了?”
“想把爬虫爬来的信息存成文档,却不知道怎么下手?”
——之前写的代码都是“内存级”的,程序一关数据全丢。今天咱们学文件操作的四大核心技能,让代码既能“读”懂电脑里的文档,又能“写”出数据到文件,实现数据永久保存,这才是实用程序的入门标配。
一、文件读写:最基础的“数据存取”
文件读写就像“用笔记本记东西”:打开笔记本(打开文件)→ 写内容(写文件)/ 看内容(读文件)→ 合上笔记本(关闭文件)。Python用open()函数打开文件,搭配read()/write()方法完成读写,核心是“打开后必须关闭”,但用with语句能自动关闭,新手必学。
with open("student_scores.txt", "w", encoding="utf-8") as f: f.write("小明 85\n") f.write("小红 92\n") f.write("小李 78\n")print("成绩已保存到文件")with open("student_scores.txt", "r", encoding="utf-8") as f: all_content = f.read() print("全部成绩:\n", all_content) f.seek(0) for line in f: name, score = line.strip().split() print(f"姓名:{name},成绩:{score}")
避坑点:① 必须加encoding="utf-8",否则读写中文会乱码;② 写入模式“w”会清空原有内容,追加用“a”,只读用“r”,弄错会丢数据。
二、StringIO和BytesIO:内存里的“虚拟文件”
有时候不需要存真实文件,只是想在内存里临时“模拟文件操作”(比如处理爬虫获取的字符串),就用StringIO(处理文本)和BytesIO(处理二进制数据),速度比操作真实文件快10倍。
from io import StringIO, BytesIOs_io = StringIO()s_io.write("语文 90\n")s_io.write("数学 95\n")s_io.seek(0) print("StringIO内容:")print(s_io.read()) b_io = BytesIO()b_io.write(b"Python File Operation")b_io.seek(0)print("\nBytesIO内容:", b_io.read().decode("utf-8"))
核心用途:StringIO常用于处理爬虫响应的文本内容,BytesIO常用于处理下载的图片、音频等二进制文件,避免生成临时文件占用磁盘。
三、操作文件和目录:代码当“文件管理器”
想让代码自动创建文件夹、删除文件、查看目录下的文件?用os模块和pathlib模块就能实现,相当于用代码操作“我的电脑”,批量处理文件超方便。
import osfrom pathlib import Pathprint
("当前目录:", os.getcwd())os.makedirs("student_data", exist_ok=True) os.rename("student_scores.txt", "student_data/student_scores.txt")data_dir = Path("student_data")for file in data_dir.iterdir(): print(f"\n文件夹内文件:{file.name},是否为文件:{file.is_file()}")
新手提醒:删除操作(os.remove/rmdir)不可逆,测试时先备份文件;pathlib是Python 3.4+的新模块,语法更直观,优先使用。
四、序列化:让数据“跨程序”传递
把Python的列表、字典存到文件里,直接写会变成乱码,这时候需要“序列化”——把数据转成特殊格式(如JSON),存到文件后,其他程序(甚至其他语言)也能读取。Python用json模块实现序列化,是前后端交互、数据存储的核心技能。
import jsonstudent_info = { "name": "小明", "age": 16, "scores": {"语文": 85, "数学": 92}, "is_student": True}with open("student_info.json", "w", encoding="utf-8") as f: json.dump(student_info, f, ensure_ascii=False, indent=2)print("字典已序列化保存")with open("student_info.json", "r", encoding="utf-8") as f: loaded_info = json.load(f) print("\n读取的学生信息:", loaded_info) print("学生年龄:", loaded_info["age"])
核心优势:JSON格式是通用的数据格式,Python序列化的文件,Java、JavaScript等语言都能读取,实现“数据互通”;而且JSON文件是文本格式,用记事本就能打开编辑,非常灵活。
五、实战:学生信息管理系统(文件版)
把今天的知识点组合起来,写一个“能存能读”的学生信息管理功能,程序关掉数据也不会丢:
import jsonfrom pathlib import Pathdef save_student(students): Path("data").mkdir(exist_ok=True) with open("data/students.json", "w", encoding="utf-8") as f: json.dump(students, f, ensure_ascii=False, indent=2)def load_student(): file_path = Path("data/students.json") if not file_path.exists(): return [] with open(file_path, "r", encoding="utf-8") as f: return json.load(f)students = load_student()new_student = {"name": "小张", "age": 15, "score": 88}students.append(new_student)save_student(students)print("更新后的学生列表:", load_student())
今天的四个知识点,是数据持久化的基础:文件读写处理简单文本,StringIO/BytesIO优化内存操作,文件目录管理实现批量控制,序列化实现复杂数据的存储与互通。
新手重点掌握“with open()”和“json序列化”,这两个是日常开发中用得最多的技能,把之前写的函数和这两个技能结合,就能写出真正能“存住数据”的实用程序。
【今日任务】写一个“日记记录工具”:① 接收用户输入的日期和日记内容;② 把内容追加保存到“diary.txt”,格式为“2024-05-21:今天学了文件操作...”;③ 读取文件并打印所有日记内容。
以上就是今天给你分享的内容,觉得有用的话欢迎点赞收藏哦!
如果你也对Python这门编程感兴趣的话,欢迎加入我们。(小白也可以参加)
三更老师亲自上课示范,2天:理论+实操教学+直播教学演示+课后辅导获取方式:
1.关注下方公众号↓↓↓↓
2.点赞+再看
3.在后台发送:“python” 即可领取资料福利/开通上课权限
资料已经打包好了,需要的关注公众号发送“111”领取