当前位置: 首页 > news >正文

Python入门第三课:进阶编程技能: 文件操作与数据持久化

 文件操作与数据持久化

 1. 文件读写基础

# 写入文件
with open("diary.txt", "w", encoding="utf-8") as file:file.write("2023年10月15日\n")file.write("今天学会了Python文件操作!\n")file.write("这是一个重要的里程碑。\n")# 读取文件
print("=== 日记内容 ===")
with open("diary.txt", "r", encoding="utf-8") as file:content = file.read()print(content)# 逐行读取
print("\n=== 逐行读取 ===")
with open("diary.txt", "r", encoding="utf-8") as file:for line in file:print(line.strip())  # strip()移除换行符

 2. CSV文件处理

import csv# 写入CSV文件
data = [["姓名", "年龄", "城市"],["张三", 25, "北京"],["李四", 30, "上海"],["王五", 28, "广州"]
]with open("people.csv", "w", newline="", encoding="utf-8") as file:writer = csv.writer(file)writer.writerows(data)# 读取CSV文件
print("\n=== CSV文件内容 ===")
with open("people.csv", "r", encoding="utf-8") as file:reader = csv.reader(file)for row in reader:print(f"{row[0]} | {row[1]}岁 | {row[2]}")

异常处理机制

 1. 基本异常处理

# 除法计算器
while True:try:num1 = float(input("请输入被除数: "))num2 = float(input("请输入除数: "))result = num1 / num2print(f"结果: {result:.2f}")breakexcept ValueError:print("错误:请输入有效数字!")except ZeroDivisionError:print("错误:除数不能为零!")except Exception as e:print(f"发生未知错误: {e}")finally:print("-" * 30)

 2. 自定义异常

class AgeError(Exception):"""年龄异常"""def __init__(self, age, message="年龄不合法"):self.age = ageself.message = messagesuper().__init__(self.message)def __str__(self):return f"{self.message}: {self.age}"# 验证年龄
def check_age(age):if age < 0:raise AgeError(age, "年龄不能为负数")elif age > 150:raise AgeError(age, "年龄超过人类极限")else:print(f"年龄 {age} 验证通过")# 测试异常
try:check_age(200)
except AgeError as e:print(e)

 模块与包管理

 1. 使用标准库模块

import math
import random
from datetime import datetime# 数学模块
print("圆周率:", math.pi)
print("平方根:", math.sqrt(16))# 随机模块
print("随机数:", random.randint(1, 100))
print("随机选择:", random.choice(["苹果", "香蕉", "橙子"]))# 日期时间
now = datetime.now()
print("当前时间:", now.strftime("%Y-%m-%d %H:%M:%S"))

2. 创建自定义模块

my_utils.py

def calculate_circle_area(radius):"""计算圆面积"""return 3.14159 * radius ** 2def celsius_to_fahrenheit(celsius):"""摄氏度转华氏度"""return celsius * 9/5 + 32

main.py

from my_utils import calculate_circle_area, celsius_to_fahrenheitprint(f"半径为5的圆面积: {calculate_circle_area(5):.2f}")
print(f"25摄氏度 = {celsius_to_fahrenheit(25):.1f}华氏度")

 面向对象编程基础

 1. 类与对象

class Dog:# 构造函数def __init__(self, name, breed, age):self.name = nameself.breed = breedself.age = age# 方法def bark(self):print(f"{self.name} 在汪汪叫!")def description(self):return f"{self.name}是一只{self.age}岁的{self.breed}"# 创建对象
my_dog = Dog("旺财", "金毛", 3)
friend_dog = Dog("小黑", "泰迪", 2)# 使用对象
print(my_dog.description())
my_dog.bark()print("\n" + friend_dog.description())
friend_dog.bark()

 2. 继承与多态

class Animal:def __init__(self, name):self.name = namedef speak(self):passclass Cat(Animal):def speak(self):return "喵喵~"class Bird(Animal):def speak(self):return "叽叽喳喳!"# 多态示例
def animal_sound(animal):print(f"{animal.name} 说: {animal.speak()}")# 创建不同动物对象
animals = [Cat("小花猫"),Bird("小黄鸟")
]# 调用多态函数
for animal in animals:animal_sound(animal)

## 项目实践:学生成绩管理系统

import json
import osclass Student:def __init__(self, name, student_id):self.name = nameself.student_id = student_idself.grades = {}def add_grade(self, subject, grade):self.grades[subject] = gradedef average_grade(self):if not self.grades:return 0return sum(self.grades.values()) / len(self.grades)def __str__(self):grades_str = ", ".join([f"{k}: {v}" for k, v in self.grades.items()])return f"学生: {self.name} (学号: {self.student_id})\n成绩: {grades_str}\n平均分: {self.average_grade():.1f}"class GradeSystem:def __init__(self):self.students = {}self.load_data()def add_student(self, name, student_id):if student_id in self.students:print("该学号已存在!")return Falseself.students[student_id] = Student(name, student_id)self.save_data()return Truedef add_grade(self, student_id, subject, grade):if student_id not in self.students:print("学号不存在!")returnself.students[student_id].add_grade(subject, grade)self.save_data()def show_student(self, student_id):if student_id in self.students:print(self.students[student_id])else:print("找不到该学生")def save_data(self):data = {}for sid, student in self.students.items():data[sid] = {"name": student.name,"grades": student.grades}with open("grades.json", "w", encoding="utf-8") as f:json.dump(data, f, ensure_ascii=False, indent=2)def load_data(self):if os.path.exists("grades.json"):with open("grades.json", "r", encoding="utf-8") as f:data = json.load(f)for sid, info in data.items():student = Student(info["name"], sid)student.grades = info["grades"]self.students[sid] = studentdef main_menu():system = GradeSystem()while True:print("\n===== 学生成绩管理系统 =====")print("1. 添加学生")print("2. 添加成绩")print("3. 查看学生成绩")print("4. 退出系统")choice = input("请选择操作 (1-4): ")if choice == "1":name = input("请输入学生姓名: ")student_id = input("请输入学号: ")if system.add_student(name, student_id):print("学生添加成功!")elif choice == "2":student_id = input("请输入学号: ")subject = input("请输入科目: ")try:grade = float(input("请输入成绩: "))system.add_grade(student_id, subject, grade)print("成绩添加成功!")except ValueError:print("成绩必须是数字!")elif choice == "3":student_id = input("请输入学号: ")system.show_student(student_id)elif choice == "4":print("感谢使用成绩管理系统!")breakelse:print("无效选择,请重新输入")if __name__ == "__main__":main_menu()

 Python学习路径图

 练习任务

1. **日志记录器**:创建一个日志类,自动记录时间并将日志写入文件
2. **温度转换模块**:将之前的温度转换功能封装为模块,并添加异常处理
3. **银行账户系统**:使用OOP实现银行账户类,支持存款、取款和转账功能
4. **数据导出工具**:将学生成绩管理系统中的数据导出为CSV格式

> "面向对象编程让你可以用代码构建世界。" - Grady Booch

通过本课的学习,你已经掌握了Python的核心编程概念!接下来可以探索更高级的主题如正则表达式、数据库操作和Web开发框架。💻🚀

http://www.dtcms.com/a/304486.html

相关文章:

  • 【C++算法】78.BFS解决FloodFill算法_算法简介
  • 量子计算革命:重新定义计算的边界与未来
  • react 的 useTransition 、useDeferredValue
  • ZKmall开源商城架构工具链:Docker、k8s 部署与管理技巧
  • 反射核心:invoke与setAccessible方法详解
  • SpringBoot整合RocketMQ(阿里云ONS)
  • 数据库4.0
  • Linux 文件管理高级操作:复制、移动与查找的深度探索
  • Deep Research(信息检索增强)认识和项目实战
  • 计算器4.0:新增页签功能梳理页面,通过IO流实现在用户本地存储数据
  • 点控云数据洞察智能体:让房地产决策有据可循,让业务增长稳健前行
  • 【LLM】——qwen2.5 VL模型导出到onnx
  • Python中二进制文件操作
  • 快速了解逻辑回归
  • 【华为机试】43. 字符串相乘
  • 【LeetCode 随笔】
  • 【深度学习】独热编码(One-Hot Encoding)
  • 开源 Arkts 鸿蒙应用 开发(十一)证书和包名修改
  • C语言在键盘上输入一个3行3列矩阵的各个元素的值(值为整数),然后输出主对角线元素的积,并在fun()函数中输出。
  • 信号上升时间与带宽的关系
  • Leetcode-3361两个字符串的切换距离
  • FastAPI入门:请求体的字段、嵌套模型、额外数据、额外数据类型
  • Linux系统部署k8s集群
  • 在 Web3 时代通过自我主权合规重塑 KYC/AML
  • Git快速入门,完整的git项目管理工具教程,git入门到精通!
  • 青少年软件编程图形化Scratch等级考试试卷(二级)2025年6月
  • 【EDA】Calma--早期版图绘制工具商
  • python案例:基于python 神经网络cnn和LDA主题分析的旅游景点满意度分析
  • 解决mac下git pull、push需要输入密码
  • 半导体企业选用的跨网文件交换系统到底应该具备什么功能?