
图1:Python文件操作与异常处理 – 文件操作核心模式与方法总览
一、Python文件操作基础:open() 函数与核心打开模式
所有文件操作的起点都是 open() 函数,它的作用是打开指定文件并建立程序与文件的连接,操作完成后必须关闭文件释放系统资源,这是Python文件操作的基础规则,也是后续结合异常处理的核心场景。
- r:只读模式(默认),仅能读取文件内容,文件不存在则直接报错
- w:覆盖写入模式,文件不存在则自动创建,存在则清空原有所有内容
- a:追加写入模式,文件不存在则自动创建,仅在文件末尾添加新内容
- r+:读写模式,可同时实现读取和写入,文件不存在则报错
- encoding=”utf-8″:解决中文乱码的必备参数,读写中文文件必须指定
基础写法:open + close 手动管理资源
# 打开文件:指定路径、模式、编码,避免中文乱码
f = open("test.txt", "r", encoding="utf-8")
# 读取文件内容
content = f.read()
print("文件内容:", content)
# 手动关闭文件,释放系统资源,必须写
f.close()
推荐写法:with 语句 自动关闭文件(最优实践)
手动写 close() 容易遗漏,导致文件资源泄漏,在Python开发中,with 语句是文件操作的标准写法,会在代码块执行完毕后自动关闭文件,即使代码出错也会执行关闭操作,从根本上避免资源问题。
# with语句:自动管理文件资源,无需手动写f.close()
with open("test.txt", "r", encoding="utf-8") as f:
content = f.read()
print("with语句读取内容:", content)
# 出了with代码块,文件已自动关闭,直接操作f会报错
二、Python文件操作:3种常用读取方法(按场景选择)
文件读取是最常用的文件操作,Python提供了3种核心读取方法,分别适用于小文件、大文件、需要精准获取指定行的场景,根据实际需求选择,能提升程序运行效率,减少内存占用。

图2:Python文件操作与异常处理 – 文件读取三种方法核心区别对比
1. read():一次性读取全部内容(适合小文件)
直接将文件所有内容读取到内存中,返回字符串类型,优点是简单直接,缺点是读取大文件时会占用大量内存,甚至导致程序卡死。
# read():小文件首选,一次性读取
with open("test.txt", "r", encoding="utf-8") as f:
# 无参数:读取全部;带数字参数:读取指定字节数
all_content = f.read()
# read(5) 表示只读取前5个字符
# part_content = f.read(5)
print(all_content)
2. readline():逐行读取内容(适合大文件)
每次只读取文件的一行内容,返回字符串类型,读取大文件时不会一次性占用大量内存,是处理日志文件、数据文件等大文本的核心技巧。
# readline():大文件首选,逐行读取
with open("test.txt", "r", encoding="utf-8") as f:
# 循环读取,直到读取完所有行
while True:
line = f.readline()
# 读取到空字符串,说明文件已读完
if not line:
break
# strip() 去除换行符和空格,让输出更整洁
print(line.strip())
3. readlines():读取所有行,返回列表(适合精准取行)
将文件所有行读取到内存中,每行作为列表的一个元素,返回列表类型,可通过索引快速获取指定行内容,适合需要对文件内容做行级别的精准操作。
# readlines():返回列表,按索引取行
with open("test.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
print("文件所有行:", lines)
# 通过索引获取第二行(列表索引从0开始)
if len(lines) >= 2:
print("第二行内容:", lines[1].strip())
# 遍历列表,输出所有行
for line in lines:
print(line.strip())
三、Python文件操作:文件写入 w 与 a 模式(核心区分)
文件写入是实现程序数据持久化的关键,核心分为 w(覆盖写入) 和 a(追加写入) 两种模式,**务必严格区分使用**,否则容易误删文件原有数据,这是新手最容易踩的坑。
1. w 模式:覆盖写入(清空原有内容)
打开文件时会直接清空原有所有内容,再写入新数据,文件不存在则自动创建。适合**全新写入数据、覆盖旧数据**的场景,使用时需格外谨慎。
# w模式:覆盖写入,原有内容会被清空
with open("test.txt", "w", encoding="utf-8") as f:
# write() 写入字符串,\n 表示换行
f.write("Hello Python\n")
f.write("文件写入测试 - w模式\n")
f.write("Python文件操作核心技巧")
# 此时文件中只有新写入的内容,原有内容已被删除
2. a 模式:追加写入(不覆盖,末尾添加)
打开文件后不会修改原有任何内容,仅在文件末尾添加新数据,文件不存在则自动创建。适合**记录日志、累加数据、新增内容**的场景,是日常开发中最常用的写入模式。
# a模式:追加写入,原有内容保留,新内容加在末尾
with open("test.txt", "a", encoding="utf-8") as f:
f.write("\n") # 先换行,避免和最后一行拼接
f.write("追加一行内容 - a模式\n")
f.write("Python文件操作 追加写入演示")
# 此时文件原有内容保留,新内容在最后面
四、Python文件操作:目录管理 os 模块(必备补充)
实际开发中,文件操作往往需要搭配目录操作,比如创建文件夹、判断文件/文件夹是否存在、遍历目录下的文件等,Python的 os 模块 提供了全套目录操作方法,是文件操作的重要补充。
import os
# 1. 获取当前工作目录(程序运行的目录)
print("当前工作目录:", os.getcwd())
# 2. 创建文件夹(仅能创建一级空文件夹,已存在则报错)
if not os.path.exists("test_dir"):
os.mkdir("test_dir")
print("文件夹创建成功!")
else:
print("文件夹已存在,无需重复创建!")
# 3. 查看指定目录下的所有文件/文件夹
print("当前目录下的所有内容:", os.listdir("./"))
# 4. 判断文件/文件夹是否存在(核心实用方法,避免路径错误)
print("test.txt是否存在:", os.path.exists("test.txt"))
print("test_dir是否存在:", os.path.exists("test_dir"))
# 5. 删除文件(文件不存在则报错,需先判断)
if os.path.exists("del.txt"):
os.remove("del.txt")
print("文件删除成功!")
# 6. 删除空文件夹(文件夹非空则报错)
if os.path.exists("empty_dir"):
os.rmdir("empty_dir")
print("文件夹删除成功!")
五、Python异常处理:try-except 让程序不崩溃
文件操作受外部因素影响极大,比如文件不存在、权限不足、路径错误、编码不匹配等,都会导致程序报错崩溃。异常处理就是通过特定语法捕获这些错误,让程序在出错时执行自定义逻辑,而不是直接崩溃,这是Python文件操作的必备搭配。

图3:Python文件操作与异常处理 – try-except异常处理核心执行流程
基础语法:try + except + finally(核心结构)
- try:存放可能出错的代码(比如文件操作代码)
- except:捕获指定异常,执行错误处理逻辑(可写多个)
- finally:无论是否出错,都会执行(常用于手动释放资源)
try:
# 可能出错的代码:尝试读取一个不存在的文件
f = open("不存在的文件.txt", "r", encoding="utf-8")
content = f.read()
except FileNotFoundError:
# 捕获「文件不存在」异常,执行自定义提示
print("错误:文件不存在,请检查文件路径是否正确!")
except Exception as e:
# 捕获所有未指定的异常,e表示异常信息
print(f"未知错误:{e}")
finally:
# 无论是否出错,都会执行:手动关闭文件
try:
f.close()
except:
pass
print("程序执行完毕,资源已释放!")
文件操作高频异常类型(必记)
异常处理的关键是**精准捕获指定异常**,文件操作中有5种高频异常,记住它们能让你的错误处理更精准,提示更友好。
- FileNotFoundError:文件/文件夹路径不存在(最常见)
- PermissionError:权限不足,无法访问/修改/删除文件
- UnicodeDecodeError:编码错误,未指定utf-8或文件编码不匹配
- IsADirectoryError:把文件夹当成文件来操作(比如读取文件夹)
- OSError:系统级错误,比如删除非空文件夹、路径非法
六、Python文件操作与异常处理:综合实战(最常用场景)
在实际开发中,**文件操作和异常处理必须结合使用**,这是写出健壮程序的基本要求。以下是两个经典实战案例,可直接复用在你的项目中,覆盖「安全读取文件」和「安全写入文件」两大核心场景。
实战1:安全读取文件(自动捕获所有高频异常)
def read_file_safe(file_path):
"""
安全读取文件函数:捕获所有文件读取高频异常,返回友好提示
:param file_path: 文件路径
:return: 读取成功返回文件内容,失败返回错误信息
"""
try:
with open(file_path, "r", encoding="utf-8") as f:
return f.read()
except FileNotFoundError:
return f"错误:文件【{file_path}】不存在,请检查路径!"
except PermissionError:
return f"错误:无权限访问文件【{file_path}】!"
except UnicodeDecodeError:
return f"错误:文件【{file_path}】编码不匹配,请检查编码!"
except IsADirectoryError:
return f"错误:【{file_path}】是文件夹,不是文件!"
except Exception as e:
return f"读取文件【{file_path}】失败:{e}"
# 调用函数,测试不同场景
print(read_file_safe("test.txt")) # 正常读取,返回内容
print(read_file_safe("不存在的文件.txt")) # 捕获文件不存在异常
实战2:安全写入文件(追加模式,避免误删数据)
def write_file_safe(file_path, content):
"""
安全写入文件函数:追加模式,捕获所有写入高频异常
:param file_path: 文件路径
:param content: 要写入的内容
:return: 成功返回True,失败返回错误信息
"""
try:
with open(file_path, "a", encoding="utf-8") as f:
f.write(content + "\n") # 换行,让每条内容单独一行
return True
except PermissionError:
return f"错误:无权限写入文件【{file_path}】!"
except IsADirectoryError:
return f"错误:【{file_path}】是文件夹,不是文件!"
except Exception as e:
return f"写入文件【{file_path}】失败:{e}"
# 调用函数,写入日志(实际开发中可用于记录用户操作、程序运行日志)
write_file_safe("run_log.txt", "2026-04-02 10:00:00 程序启动成功")
write_file_safe("run_log.txt", "2026-04-02 10:30:00 执行文件操作成功")
print(write_file_safe("run_log.txt", "2026-04-02 11:00:00 程序正常退出"))
七、Python异常处理:raise 主动抛出异常(规范业务逻辑)
除了捕获程序运行时的异常,我们还可以根据**业务逻辑**使用 raise 主动抛出异常,比如判断文件大小为空、写入内容不符合要求时,主动提示错误,规范用户和程序的操作,让错误提前暴露。
def check_file_not_empty(file_path):
"""
检查文件是否为空,为空则主动抛出异常
:param file_path: 文件路径
"""
# 先判断文件是否存在
if not os.path.exists(file_path):
raise FileNotFoundError(f"文件【{file_path}】不存在!")
# 打开文件,判断内容是否为空
with open(file_path, "r", encoding="utf-8") as f:
content = f.read().strip()
if not content:
# 主动抛出ValueError异常,自定义错误信息
raise ValueError(f"文件【{file_path}】内容为空,无法处理!")
print(f"文件【{file_path}】检查通过,内容非空!")
return content
# 调用函数,捕获主动抛出的异常
try:
check_file_not_empty("empty.txt") # 空文件,主动抛出异常
except (FileNotFoundError, ValueError) as e:
print("错误:", e)
except Exception as e:
print("未知错误:", e)
八、Python文件操作与异常处理:新手高频易错点(避坑指南)
易错点1:中文乱码,忘记添加 encoding=”utf-8″
读写中文文件时,必须在open()中指定 encoding=”utf-8″,否则会出现乱码或UnicodeDecodeError异常,这是最基础也是最容易忘的点。
易错点2:w模式误删数据,混淆覆盖和追加
新手容易把w模式和a模式搞混,用w模式做追加操作,导致文件原有数据被清空。记住:新增内容用a模式,覆盖旧数据才用w模式。
易错点3:文件未关闭,导致资源泄漏
手动写open()后忘记写close(),会导致文件资源被长期占用,甚至无法再次操作该文件。**一律使用with open语法**,自动关闭文件,从根本避免这个问题。
易错点4:不捕获异常,程序遇到错误直接崩溃
文件操作受外部因素影响大,即使路径正确,也可能出现权限不足、文件被占用等问题。**所有文件操作代码必须放在try-except中**,确保程序健壮性。
易错点5:路径错误,直接写绝对路径导致程序移植性差
直接写绝对路径(比如C:/test.txt),会导致程序在其他电脑上运行时路径错误。建议使用相对路径,并用os.path.exists()先判断路径是否存在。
Python文件操作与异常处理 延伸学习推荐
深入学习可参考Python官方文件操作文档(权威原文档,含更多高级用法);
学完文件操作与异常处理,可回顾Python面向对象编程全攻略,尝试将文件操作封装成类,实现更模块化的开发;
下一篇将学习Python模块与包,让你的代码真正实现工程化管理。
九、Python文件操作与异常处理:核心知识点总结
- with open 是文件操作的最优写法,自动关闭文件,避免资源泄漏,读写文件一律使用该语法
- r/w/a 是文件操作三大核心模式,读/覆盖写/追加写,根据场景选择,切勿混淆w和a模式
- encoding=”utf-8″ 是读写中文文件的必备参数,解决中文乱码的核心方案
- read()/readline()/readlines() 三种读取方法,分别适用于小文件、大文件、精准取行场景
- os 模块 是目录操作的核心,os.path.exists() 是判断路径是否存在的实用方法,必用
- try-except 是异常处理的核心,文件操作必须搭配使用,精准捕获高频异常,让程序不崩溃
- finally 无论是否出错都会执行,常用于手动释放资源;raise 可主动抛出异常,规范业务逻辑
- 文件操作 + 异常处理 是Python实战开发的基础组合,是写出健壮、可维护程序的基本要求
版权所有 © 2026 小白编程笔记,未经授权禁止任何形式的转载、抄袭、洗稿
下一篇预告:Python 模块与包 从入门到精通,让代码真正工程化!
Python文件操作
Python异常处理
Python基础
try-except
os模块
Python实战
新手避坑

渝公网安备50022402001073号
Pingback: Python核心编程:7大核心主题+实战进阶全攻略,小白一站式学Python - 小白 编程 笔记