第五单元:文件操作与异常处理

约2周学习时间,掌握文件操作和异常处理的核心技能

5.1 文件操作基础

文件操作是编程中常见的任务,Python提供了简单而强大的文件操作功能。

打开文件

# 打开文件
with open("example.txt", "r") as f:     content = f.read()     print(content)

使用 with 语句可以自动关闭文件,不需要手动调用 close() 方法。

文件打开模式

读取模式

  • r: 只读模式(默认)
  • rb: 二进制只读模式
  • r+: 读写模式

写入模式

  • w: 写入模式(覆盖现有文件)
  • wb: 二进制写入模式
  • w+: 读写模式(覆盖现有文件)
  • a: 追加模式(在文件末尾添加)
  • a+: 读写模式(在文件末尾添加)

5.2 文件读写操作

读取文件

# 读取整个文件
with open("example.txt", "r") as f:     content = f.read()     print(content)
# 逐行读取
with open("example.txt", "r") as f:     for line in f:         print(line.strip())
# 读取所有行到列表
with open("example.txt", "r") as f:     lines = f.readlines()     print(lines)

写入文件

# 写入文件(覆盖)
with open("example.txt", "w") as f:     f.write("Hello, World!\n")     f.write("Welcome to Python!\n")
# 追加到文件
with open("example.txt", "a") as f:     f.write("This is an additional line.\n")
# 写入多行
lines = ["Line 1\n", "Line 2\n", "Line 3\n"] with open("example.txt", "w") as f:     f.writelines(lines)

5.3 异常处理

异常是程序运行过程中发生的错误,Python提供了异常处理机制来捕获和处理这些错误。

# 基本异常处理
try:     # 可能引发异常的代码     result = 10 / 0 except ZeroDivisionError:     # 处理特定异常     print("除数不能为零!") except Exception as e:     # 处理其他所有异常     print(f"发生错误: {e}") else:     # 没有异常时执行     print("计算成功!") finally:     # 无论是否有异常都会执行     print("执行完毕")

常见异常类型

  • SyntaxError: 语法错误
  • NameError: 变量未定义
  • TypeError: 类型错误
  • ZeroDivisionError: 除数为零
  • IndexError: 索引越界
  • KeyError: 字典键不存在
  • FileNotFoundError: 文件未找到
  • ValueError: 值错误

5.4 综合应用:文件处理与异常处理

下面是一个综合示例,展示如何结合文件操作和异常处理来处理实际问题。

# 示例:读取和处理文件
def process_file(file_path):     try:         with open(file_path, "r") as f:             lines = f.readlines()             print(f"文件共有 {len(lines)} 行")                          for i, line in enumerate(lines, 1):                 print(f"第 {i} 行: {line.strip()}")     except FileNotFoundError:         print(f"错误:文件 '{file_path}' 不存在")     except Exception as e:         print(f"处理文件时发生错误: {e}")     else:         print("文件处理成功")
# 调用函数
process_file("example.txt")

示例:CSV文件处理

# 导入CSV模块
import csv
# 读取CSV文件
def read_csv(file_path):     try:         with open(file_path, "r", encoding="utf-8") as f:             reader = csv.DictReader(f)             for row in reader:                 print(row)     except Exception as e:         print(f"读取CSV文件时发生错误: {e}")
# 写入CSV文件
def write_csv(file_path, data):     try:         with open(file_path, "w", newline="", encoding="utf-8") as f:             fieldnames = ["name", "age", "city"]             writer = csv.DictWriter(f, fieldnames=fieldnames)             writer.writeheader()             for row in data:                 writer.writerow(row)     except Exception as e:         print(f"写入CSV文件时发生错误: {e}")
# 测试
data = [     {"name": "Alice", "age": "25", "city": "New York"},     {"name": "Bob", "age": "30", "city": "London"},     {"name": "Charlie", "age": "35", "city": "Paris"} ]
write_csv("people.csv", data) read_csv("people.csv")

5.5 实践项目:学生管理系统

下面是一个综合实践项目,结合文件操作和异常处理,实现一个简单的学生管理系统。

class Student:     def __init__(self, id, name, age, grade):         self.id = id         self.name = name         self.age = age         self.grade = grade          def __str__(self):         return f"ID: {self.id}, Name: {self.name}, Age: {self.age}, Grade: {self.grade}"
class StudentManager:     def __init__(self, file_path):         self.file_path = file_path         self.students = []         self.load_students()          def load_students(self):         try:             with open(self.file_path, "r", encoding="utf-8") as f:                 for line in f:                     parts = line.strip().split(",")                     if len(parts) == 4:                         student = Student(parts[0], parts[1], int(parts[2]), parts[3])                         self.students.append(student)         except FileNotFoundError:             print(f"文件 '{self.file_path}' 不存在,将创建新文件")         except Exception as e:             print(f"加载学生数据时发生错误: {e}")          def save_students(self):         try:             with open(self.file_path, "w", encoding="utf-8") as f:                 for student in self.students:                     f.write(f"{student.id},{student.name},{student.age},{student.grade}\n")         except Exception as e:             print(f"保存学生数据时发生错误: {e}")          def add_student(self, student):         self.students.append(student)         self.save_students()          def remove_student(self, student_id):         for i, student in enumerate(self.students):             if student.id == student_id:                 del self.students[i]                 self.save_students()                 return True         return False          def list_students(self):         if not self.students:             print("没有学生数据")         else:             for student in self.students:                 print(student)
# 测试学生管理系统
if __name__ == "__main__":     manager = StudentManager("students.txt")          # 添加学生
    student1 = Student("S001", "Alice", 18, "A")     student2 = Student("S002", "Bob", 19, "B")     manager.add_student(student1)     manager.add_student(student2)          # 列出学生
    print("所有学生:")     manager.list_students()          # 删除学生
    manager.remove_student("S001")          # 再次列出学生
    print("删除后的学生:")     manager.list_students()

单元小结

通过本单元的学习,你已经掌握了文件操作和异常处理的核心技能。文件操作让你能够读写文件,处理数据持久化;异常处理让你的程序更加健壮,能够优雅地处理运行时错误。这些技能对于实际编程非常重要,是构建可靠应用程序的基础。

Python 代码运行器

运行结果:

点击"运行代码"查看结果...