Python文件操作与异常处理:9 大核心知识点 + 实战案例,让程序更健壮 – 小白编程笔记

Python文件操作与异常处理是Python开发的核心必备技能,也是从基础语法走向实战开发的关键一步。文件操作让程序能读写本地数据、保存配置、记录日志,异常处理则能让程序在遇到错误时不崩溃,优雅给出提示。本文从零开始,用通俗的语言+可直接运行的案例,讲透文件操作的全流程和异常处理的核心逻辑,搭配新手避坑指南,让你的Python程序更安全、更健壮、更专业。

Python文件操作与异常处理 文件操作核心模式rwa与方法总览图

图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种核心读取方法,分别适用于小文件、大文件、需要精准获取指定行的场景,根据实际需求选择,能提升程序运行效率,减少内存占用。

Python文件操作与异常处理 文件读取read/readline/readlines三种方法对比图

图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文件操作的必备搭配。

Python文件操作与异常处理 try-except异常处理执行流程示意图

图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实战开发的基础组合,是写出健壮、可维护程序的基本要求

本文为「小白编程笔记」原创 · Python 文件操作与异常处理 全解
版权所有 © 2026 小白编程笔记,未经授权禁止任何形式的转载、抄袭、洗稿
下一篇预告:Python 模块与包 从入门到精通,让代码真正工程化!

文章标签:
Python文件操作
Python异常处理
Python基础
try-except
os模块
Python实战
新手避坑

1人评论了“Python文件操作与异常处理:9 大核心知识点 + 实战案例,让程序更健壮 – 小白编程笔记”

  1. Pingback: Python核心编程:7大核心主题+实战进阶全攻略,小白一站式学Python - 小白 编程 笔记

发表评论

滚动至顶部
渝公网安备50022402001073号  |  渝ICP备2026004448号   © 2026 小白编程笔记