当前位置:首页>python>使用openclaw制作python零基础教学-13

使用openclaw制作python零基础教学-13

  • 2026-10-12 01:32:14
使用openclaw制作python零基础教学-13

零基础学Python:Day13!文件操作与IO:读写文件就这么简单

昨天我们学习了面向对象进阶知识点,掌握了魔法方法、property属性和继承进阶,先来对一下昨天的作业答案~

📋 昨日作业答案

1. 给你昨天写的Rectangle类添加__str__魔法方法,打印对象的时候输出长和宽,更友好

class Rectangle:def __init__(self, length, width):self.length = lengthself.width = widthdef area(self):return self.length * self.widthdef perimeter(self):return 2 * (self.length + self.width)def __str__(self):return f"Rectangle(length={self.length}, width={self.width})"rect = Rectangle(5, 3)print(rect)  # 输出:Rectangle(length=5, width=3)

现在打印对象就能直接看到长和宽,调试起来方便多了。

2. 给Person类的年龄属性添加property,设置年龄的时候做校验(必须1-120之间),像普通属性一样访问年龄

class Person:def __init__(self, name, age):self.name = nameself._age = age    @propertydef age(self):return self._age    @age.setterdef age(self, new_age):if 1 <= new_age <= 120:self._age = new_ageelse:raise ValueError("年龄必须在1-120之间")p = Person("张三", 20)print(p.age)  # 20p.age = 25print(p.age)  # 25# p.age = 150  # 抛出异常

完美,用property实现了优雅的属性访问和校验。

3. 定义一个Shape父类,有计算面积area方法(默认返回0),然后定义Rectangle子类和Circle子类,继承自Shape,分别实现自己的area方法

class Shape:def area(self):return 0class Rectangle(Shape):def __init__(self, length, width):self.length = lengthself.width = widthdef area(self):return self.length * self.widthclass Circle(Shape):def __init__(self, radius):self.radius = radiusdef area(self):import mathreturn math.pi * self.radius ** 2rect = Rectangle(5, 3)print(rect.area())  # 15circle = Circle(5)print(circle.area())  # 78.5398...

多态的体现,不同形状都有area方法,实现不同,完美。


好了,对完答案,我们开始今天的内容:文件操作!在编程中,我们经常需要读写文件,比如读取配置文件、保存程序数据、处理文本文件等等,Python操作文件非常简单,今天我们就来学习一下。


📂 打开文件:open()函数

Python中打开文件用内置函数open(),基本语法:

f = open("文件名", "打开模式")# 操作文件...f.close()

打开模式有哪些呢?最常用的:

  • r:只读模式(默认),只能读取,不能写入
  • w:写入模式,会覆盖原有内容,如果文件不存在会创建
  • a:追加模式,在文件末尾追加内容,不会覆盖原有内容
  • rb/wb:二进制读写模式,用来处理图片、视频等二进制文件

注意:打开文件之后一定要记得close()关闭文件,不然会占用系统资源。

🌟 推荐写法:with语句自动关闭文件

Python给我们提供了with语句,它会自动帮我们关闭文件,不用我们手动调用close(),非常方便,推荐大家都用这种写法:

with open("test.txt", "r", encoding="utf-8") as f:# 在with块里操作文件    content = f.read()print(content)# with块结束,文件自动关闭

encoding="utf-8"指定编码,处理中文的时候不会乱码,一定要加上哦!


📖 读取文件的几种方法

读取文件有几种常用方法,我们一个个来看:

1. read():读取整个文件内容

with open("test.txt", "r", encoding="utf-8") as f:    content = f.read()print(content)  # 整个文件内容都读到content变量里

适合小文件,一下子读完很方便。

2. readline():一次读取一行

with open("test.txt", "r", encoding="utf-8") as f:    line = f.readline()while line:  # 读到空字符串说明读完了print(line, end="")        line = f.readline()

适合大文件,一次读一行不会占太多内存。

3. readlines():读取所有行,返回列表

with open("test.txt", "r", encoding="utf-8") as f:    lines = f.readlines()for line in lines:print(line, end="")

每一行是列表的一个元素,方便遍历处理。

4. 直接遍历文件对象

更简洁的写法,直接遍历文件对象,一次读一行:

with open("test.txt", "r", encoding="utf-8") as f:for line in f:print(line, end="")

这是最常用的写法,简洁又高效。


✍️ 写入文件的几种方法

写入文件也很简单,两种常用方法:

1. write():写入字符串

# w模式打开,覆盖原有内容with open("test.txt", "w", encoding="utf-8") as f:    f.write("第一行内容\n")    f.write("第二行内容\n")    f.write("第三行内容\n")

注意:write不会自动加换行,需要你自己写\n。

2. writelines():写入多行,传入列表

lines = ["第一行\n", "第二行\n", "第三行\n"]with open("test.txt", "w", encoding="utf-8") as f:    f.writelines(lines)

同样,每一行结尾需要自己加\n。

追加写入:用a模式

如果你想在文件末尾追加内容,不覆盖原来的内容,用a模式:

with open("test.txt", "a", encoding="utf-8") as f:    f.write("我是追加的第四行\n")

打开之后直接在文件最后加内容,原来的内容保留。


📁 常用的文件和目录操作

除了读写文件内容,我们还经常需要操作文件本身,比如删除文件、重命名、创建目录等等,这些功能在os模块和pathlib模块里,我们来看几个最常用的:

使用os模块:

import os# 判断文件或目录是否存在print(os.path.exists("test.txt"))  # True/False# 获取文件大小(字节)print(os.path.getsize("test.txt"))# 删除文件os.remove("test.txt")# 创建目录os.mkdir("my_folder")# 列出目录下所有文件和目录print(os.listdir("."))  # .代表当前目录

更现代的写法:pathlib(Python 3.4+推荐)

pathlib面向对象,用起来更舒服:

from pathlib import Path# 创建Path对象p = Path("test.txt")# 判断是否存在print(p.exists())# 获取文件大小print(p.stat().st_size)# 删除文件p.unlink()# 创建目录Path("my_folder").mkdir(exist_ok=True)# 遍历目录下所有py文件for file in Path(".").glob("*.py"):print(file)

语法更简洁直观,推荐大家用pathlib。


🎯 实战:统计文本文件中单词出现的次数

我们来做一个实用的小案例,统计一个文本文件中每个单词出现了多少次:

from collections import Counterdef count_words(filename):    counter = Counter()with open(filename, "r", encoding="utf-8") as f:for line in f:# 简单处理:分割单词,转小写            words = line.strip().split()            words = [word.lower().strip('.,!?') for word in words]            counter.update(words)return counterif __name__ == "__main__":    result = count_words("test.txt")# 输出出现次数最多的前10个单词for word, count in result.most_common(10):print(f"{word}: {count}")

这个小程序用到了我们之前学的collections.Counter,非常方便,直接就能统计次数。


⚠️ 常见异常处理

操作文件的时候经常会遇到异常,比如文件不存在,权限不够等等,我们可以用try...except捕获异常,让程序更健壮:

try:with open("not_exist.txt", "r") as f:        content = f.read()except FileNotFoundError:print("错误:文件不存在!")except PermissionError:print("错误:没有权限读取这个文件!")

处理完异常程序不会崩溃,还能给用户友好提示,这在实际开发中非常重要。


📝 今日小结

今天我们学习了Python文件操作,总结一下核心知识点:

  1. 打开关闭文件:推荐用with语句,自动关闭文件,不用手动close()
  2. 读取文件:read()读全部,readline()读一行,直接遍历文件对象逐行读取最常用
  3. 写入文件:w模式覆盖写入,a模式追加写入,记得换行要加\n
  4. 文件操作:os和pathlib都可以操作文件和目录,pathlib更简洁推荐
  5. 异常处理:捕获文件不存在、权限不足等异常,让程序更健壮

文件操作是非常基础又常用的知识点,我们保存程序数据、读取配置都离不开它,一定要掌握。


🏋️ 今日作业

动手写代码,今天的作业:

1. 创建一个文本文件hello.txt,写入三行文字:"Hello Python"、"File Operation"、"I love Python",然后读取这个文件内容打印出来

2. 写一个程序,复制一个文本文件,把a.txt的内容复制到b.txt中

3. 写一个程序,统计一个Python源代码文件一共有多少行代码(忽略空行)

4. 拓展练习:写一个程序,把用户每次输入的内容追加写到日记文件里,用户输入exit退出程序


今天我们学习了文件操作,明天就是我们这个零基础教程的最后一天了,我们来做一个完整的综合实战项目,把我们这十几天学的所有知识点都整合起来,打造一个实用的小工具,敬请期待~

最新文章

随机文章