适合对象:零编程基础的大一新生 课程目标:掌握文件读写、目录操作和序列化基础,能独立完成简单的数据处理任务(如日志记录、配置文件管理)。
课程大纲
模块1:文件读写——与计算机"对话"的基础
1.1 打开文件的"钥匙"——文件模式
Python 提供了内置的 open() 函数来打开文件,并提供了多种模式来读取、写入和追加文件内容。
生活类比:用记事本打开文档时,选择"只读"或"编辑"模式。
核心模式:
r:读取模式(默认)。如果文件不存在,会引发 FileNotFoundError。
w:写入模式。如果文件不存在,会创建一个新文件;如果文件存在,会清空文件内容。
a:追加模式。如果文件不存在,会创建一个新文件;如果文件存在,会在文件末尾追加内容。
b:二进制模式。可以与其他模式结合使用,如 rb、wb 等。
示例演示:
# 读取文件with open('D:/example.txt', 'r') as file: content = file.read() print(content)# 写入文件with open('D:/example.txt', 'w') as file: file.write('Hello, World!\n') file.write('This is a test.\n')# 追加内容到文件with open('D:/example.txt', 'a') as file: file.write('Appending a new line.\n')
1.3 动手实验
任务:创建一个文本文件,写入你的课程表,然后读取并打印内容。
提示:使用with语句自动关闭文件,避免资源泄露。
参考答案:
with open('D:/课程表.txt', 'w', encoding='utf-8') as f: f.write("周一:高数\n周二:Python\n周三:英语")with open('D:/课程表.txt', 'r', encoding='utf-8') as f: print(f.read())
模块2:目录操作——管理你的"文件抽屉"
2.1 路径的"指南针"——绝对路径与相对路径
- 生活类比:告诉朋友"图书馆在3号楼2层" vs "从校门直走50米左转"。
- 核心概念
- 绝对路径:从磁盘根目录开始的完整路径(如
D:/学习/课程表.txt)。 - 相对路径:相对于当前工作目录的路径(如
./文档/日记.txt)。 - 路径拼接技巧:用
os.path.join()避免手动拼接错误。
2.2 目录操作方法
Python 提供了 os、os.path 和 shutil 模块来操作文件和目录。以下是一些常见的文件和目录操作示例:
获取当前工作目录:
import oscurrent_directory = os.getcwd()print(current_directory)
更改当前工作目录:
new_directory = 'D:/Python零基础教程/IO编程'os.chdir(new_directory)
创建目录:
# 创建单个目录os.makedirs('D:/new_directory', exist_ok=True) # exist_ok=True 表示如果目录已存在则不抛出异常# 创建多级目录os.makedirs('D:/parent_directory/child_directory', exist_ok=True)
删除目录:
# 删除空目录os.rmdir('D:/empty_directory')# 删除非空目录及其内容import shutilshutil.rmtree('D:/non_empty_directory')
列出目录内容:
# 列出当前目录下的文件和子目录contents = os.listdir('.')print(contents)# 列出指定目录下的文件和子目录specified_directory = 'D:/Python零基础教程/IO编程'contents = os.listdir(specified_directory)print(contents)
2.3 目录操作实战
任务:创建"学习资料"文件夹,并将本课程笔记保存到其中。
代码示例:
import osfrom pathlib import Path# 创建目录(如果不存在)os.makedirs("D:/学习资料/课程笔记", exist_ok=True)# 保存文件到新目录Path("D:/学习资料/课程笔记/第一课笔记.txt").write_text("今天学会了文件操作!", encoding='utf-8')
2.4 互动练习
任务:列出当前目录下的所有.txt文件,并打印它们的绝对路径。
提示:使用os.listdir()和os.path.abspath()。
参考答案:
import osfor filename in os.listdir('D:/'):if filename.endswith('.txt'): print(os.path.abspath(filename))
模块3:序列化——让数据"会说会走"
3.1 什么是序列化?
- 生活类比:把玩具(数据)放进盒子(文件)保存,需要时再拿出来玩。
- 核心场景:将Python对象(如列表、字典)保存到文件,或从文件加载数据。
序列化是将变量从内存中变成可存储或传输的过程。在 Python 中,序列化被称为 pickling,反序列化被称为 unpickling。Python 提供了 pickle 模块来实现序列化。
3.2 Pickle 序列化
序列化:
import pickle# 将对象序列化为 bytesd = {'name': 'Alice', 'age': 20}serialized_data = pickle.dumps(d)# 将对象序列化并写入文件with open('D:/dump.txt', 'wb') as file: pickle.dump(d, file)
反序列化:
# 从 bytes 反序列化对象deserialized_data = pickle.loads(serialized_data)# 从文件反序列化对象with open('D:/dump.txt', 'rb') as file: loaded_data = pickle.load(file)
3.3 JSON——数据交换的"通用语言"
如果需要在不同编程语言之间传递数据,可以使用 JSON 格式进行序列化。Python 提供了 json 模块来实现 JSON 序列化。
示例:保存学生信息到JSON文件。
import jsonstudents = [{"name": "张三", "score": 85}, {"name": "李四", "score": 72}]# 序列化(对象→JSON字符串)with open('D:/学生信息.json', 'w', encoding='utf-8') as f: json.dump(students, f, ensure_ascii=False, indent=2)# 反序列化(JSON字符串→对象)with open('D:/学生信息.json', 'r', encoding='utf-8') as f: loaded_students = json.load(f) print(loaded_students) # 输出原始列表
JSON 序列化方法:
import json# 将对象序列化为 JSON 字符串json_str = json.dumps(d)# 将 JSON 字符串写入文件with open('D:/dump1.json', 'w') as file: json.dump(d, file)# 从 JSON 字符串反序列化对象loaded_json = json.loads(json_str)# 从文件反序列化 JSON 对象with open('D:/dump1.json', 'r') as file: loaded_from_file = json.load(file)
3.4 避坑指南
- 中文乱码问题:设置
encoding='utf-8'和ensure_ascii=False。 - 文件格式匹配:JSON文件需用
.json后缀,避免用.txt。
模块4:综合实战——打造迷你日志系统
4.1 任务需求
- 创建一个日志文件,记录每天的学习进度(如"2025-10-30:学习了文件操作")。
- 每次运行程序时,自动追加新日志,并读取最近3条日志显示。
4.2 代码框架
import datetime# 追加日志defadd_log(content):with open('D:/学习日志.txt', 'a', encoding='utf-8') as f: f.write(f"{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}:{content}\n")# 读取最近3条日志defread_recent_logs():with open('D:/学习日志.txt', 'r', encoding='utf-8') as f: lines = f.readlines()[-3:] # 取最后3行for line in lines: print(line.strip())# 测试add_log("学习了IO编程")read_recent_logs()
4.3 扩展挑战
- 任务:修改日志系统,支持按日期筛选日志(如只显示2025年10月的日志)。
- 提示:结合字符串分割和日期比较。
课程总结与作业
- 总结
- 文件读写是数据持久化的基础,
with语句可自动管理资源。 - 目录操作需注意路径格式,推荐使用
pathlib模块。 - 序列化(如JSON)是数据交换的关键,需关注编码和格式问题。
- 课后作业
- 作业1:编写程序,将班级学生成绩(字典格式)保存为JSON文件,并读取验证。
- 作业2:创建一个"照片管理器",允许用户输入照片名称和拍摄日期,保存到文本文件并支持查询。
- 参考资料
- 文件读写:https://liaoxuefeng.com/books/python/io/file/index.html
- 操作文件和目录:https://liaoxuefeng.com/books/python/io/dir/index.html
- 序列化:https://liaoxuefeng.com/books/python/io/serialization/index.html
- Python IO编程:https://docs.python.org/3/tutorial/inputoutput.html
课程特色:
- 生活化场景
- 安全优先:强调
with语句和exist_ok=True避免资源泄露和目录创建错误。 - 实战驱动
- 避坑指南