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

Python 文件操作与异常处理全解析

目录

一、文件的基本概念

1. 什么是文件

2. 文件操作的核心内容

3. 文件操作的作用

二、文件的基本操作

1. 文件操作三步走

2. 打开文件:open () 函数

2.1 文件路径

2.2 常用 mode 模式

3. 写入文件:write () 函数

4. 关闭文件:close () 函数

5. 解决中文乱码问题

6. 文件的读取操作

6.1 read (size) 方法:

6.2 readlines () 方法:

6.3 readline () 方法:

三、文件备份案例

1. 案例需求

2. 实现思路

3. 代码实现

四、文件和文件夹操作

1. os 模块

2. 与文件操作相关的方法

3. 与文件夹操作相关的方法

4. 递归删除非空文件夹

五、Python 异常处理

1. 什么是异常

2. 异常捕获:try...except

3. 捕获异常并输出错误信息

4. 异常捕获中的 else 语句

5. 异常捕获中的 finally 语句

总结


在 Python 编程中,文件操作是数据持久化的核心手段,而异常处理则是保证程序健壮性的关键。本文将系统梳理文件操作的核心知识与异常处理的实用技巧,帮助你轻松掌握这两项重要技能。

一、文件的基本概念

1. 什么是文件

文件是计算机中用于长久存储数据的基本单位,它将数据组织成可管理的形式,便于检索和使用。内存中的数据在计算机关机后会消失,而文件可以将数据保存到硬盘、U 盘等存储设备中。

从类型上看,文件可分为文本文件(如 TXT、HTML)、图像文件(如 JPEG、PNG)、音频文件(如 MP3、WAV)、视频文件(如 MP4、AVI)以及可执行文件(如 EXE、DLL)等多种类别。

2. 文件操作的核心内容

日常对文件的主要操作包括:

(1)创建文件

(2)打开文件

(3)读写文件

(4)文件备份

(5)关闭文件

3. 文件操作的作用

文件操作能将程序运行过程中产生的数据存储起来,使得程序下次执行时可以直接使用这些数据,无需重新生成,极大地提高了程序的效率和实用性。

二、文件的基本操作

1. 文件操作三步走

(1)打开文件

(2)读写文件

(3)关闭文件

2. 打开文件:open () 函数

在 Python 中,使用open()函数打开文件,语法如下:

f = open(name, mode)

(1)name:要打开的目标文件名(可包含具体路径)

(2)mode:打开文件的模式(访问模式)

(3)返回值:file 文件对象,后续操作通过该对象的方法实现

    2.1 文件路径

      (1)绝对路径:从盘符开始的完整路径,如 Windows 系统中的C:\Python\python.txt,Linux 系统中的/usr/local/nginx/conf/nginx.conf。绝对路径固定,但文件移动或程序迁移时较麻烦。

    (2)相对路径:以 Python 文件本身为参考点的路径:

    2.2 常用 mode 模式

      • 同级关系:直接使用文件名
      • 上级关系:通过../访问(多级可使用../../等)88
      • 下级关系:通过文件夹名/文件名访问
    模式描述
    r只读模式,文件不存在则报错,光标在文件开头(默认模式)
    w只写模式,文件不存在则创建,写入时清空原有内容,光标在开头
    a追加模式,文件不存在则创建,在文件尾部追加内容,光标在结尾
    r+读写模式,光标在文件开头
    w+读写模式,写入时清空原有内容
    a+读写模式,光标在文件结尾,打开时为追加模式
    rb、wb、ab 等对应模式的二进制操作,适用于图片、音频、视频等文件

    提示:记住r(读)、w(写)、a(追加)三个基础模式即可应对大部分场景,带+的模式支持读写,带b的模式用于二进制文件操作。

    3. 写入文件:write () 函数

    基本语法:

    f.write('要写入的内容')  # 内容需为字符串类型
    

    4. 关闭文件:close () 函数

    f.close()  # 关闭文件,释放资源
    

    5. 解决中文乱码问题

    默认编码可能导致中文乱码,打开文件时指定encoding='utf-8'​即可:

    f = open('python.txt', 'w', encoding='utf-8')
    f.write('人生苦短,我学Python!')
    f.close()
    

    6. 文件的读取操作

    6.1 read (size) 方法:

    (1)读取指定长度(size)的内容,单位为字符 / 字节

    (2)不传入 size 则读取全部内容

    f = open('python.txt', 'r', encoding='utf-8')contents = f.read()  # 读取所有内容# contents = f.read(1024)  # 读取1024个字符print(contents)f.close()

    6.2 readlines () 方法:

    按行读取整个文件内容,返回列表(每行数据为一个元素)

    f = open('python.txt', 'r', encoding='utf-8')lines = f.readlines()for line in lines:print(line, end='')  # end=''避免重复换行f.close()

    6.3 readline () 方法:

    一次读取一行内容,每次调用后光标下移一行

    f = open('python.txt', encoding='utf-8')while True:content = f.readline()if not content:  # 读取完毕则退出循环breakprint(content, end='')f.close()

    三、文件备份案例

    1. 案例需求

    用户输入当前目录下任意文件名,程序生成该文件的备份(备份文件名为xx[备份].后缀,如test[备份].txt)。

    2. 实现思路

    (1)接收用户输入的文件名

    (2)规划备份文件名(拆分文件名和后缀,拼接备份名称)

    (3)读取源文件内容,写入备份文件

    3. 代码实现

    # 1. 接收用户输入的文件名
    oldname = input('请输入要备份的文件名称:')# 2. 规划备份文件名
    index = oldname.rfind('.')  # 从右边查找第一个'.'的下标
    if index > 0:name = oldname[:index]  # 获取文件名postfix = oldname[index:]  # 获取文件后缀newname = name + '[备份]' + postfix  # 拼接备份文件名# 3. 备份文件操作(使用二进制模式兼容所有文件类型)old_f = open(oldname, 'rb')new_f = open(newname, 'wb')# 循环读取并写入内容while True:content = old_f.read(1024)  # 每次读取1024字节if len(content) == 0:  # 读取完毕breaknew_f.write(content)# 关闭文件old_f.close()new_f.close()
    else:print('请输入正确的文件名称,否则无法进行备份操作...')
    

    四、文件和文件夹操作

    1. os 模块

    Python 通过os模块实现文件和文件夹的操作,使用前需先导入:

    import os
    

    2. 与文件操作相关的方法

    函数功能
    os.rename (旧文件名,新文件名)重命名文件
    os.remove (文件名)删除文件

    案例

    import os
    import time# 重命名文件
    os.rename('python.txt', 'linux.txt')
    time.sleep(10)  # 休眠10秒
    # 删除文件
    os.remove('linux.txt')
    

    3. 与文件夹操作相关的方法

    函数功能
    os.mkdir (文件夹名)创建文件夹
    os.getcwd()获取当前工作目录
    os.chdir (目录名)切换工作目录
    os.listdir (目录名)获取指定目录下的所有文件和文件夹,返回列表
    os.rmdir (目录名)删除空文件夹

    案例

    import os
    import time# 创建文件夹(判断是否存在,避免报错)
    if not os.path.exists('images'):os.mkdir('images')
    if not os.path.exists('images/avatar'):os.mkdir('images/avatar')# 获取当前目录
    print(os.getcwd())# 切换目录
    os.chdir('images/avatar')
    print(os.getcwd())  # 显示当前目录
    os.chdir('../../')  # 切换回上两级目录# 获取目录下的内容
    print(os.listdir())time.sleep(10)
    # 删除空文件夹
    os.rmdir('images/avatar')
    

    4. 递归删除非空文件夹

    使用shutil模块的rmtree()方法可删除非空文件夹(慎重使用!):

    import shutil# 递归删除文件夹及其内容
    shutil.rmtree('要删除的文件夹路径')
    

    五、Python 异常处理

    1. 什么是异常

    当程序运行过程中检测到错误时,解释器无法继续执行,会抛出错误提示,这就是异常。例如除数为 0、读取不存在的文件等。

    2. 异常捕获:try...except

    基本语法:

    try:可能发生错误的代码
    except:如果出现异常执行的代码
    

    案例

    try:# 尝试读取文件f = open('python.txt', 'r', encoding='utf-8')content = f.readlines()print(content)
    except:# 发生异常时创建文件print("文件不存在,已创建新文件")f = open('python.txt', 'w', encoding='utf-8')f.write('这是新创建的文件')f.close()
    

    3. 捕获异常并输出错误信息

    使用Exception as e捕获所有异常并获取错误信息:

    try:f = open('python.txt', 'r', encoding='utf-8')content = f.readlines()
    except Exception as e:print("错误信息:", e)  # 输出错误描述print("错误参数:", e.args)  # 输出错误参数(元组)
    finally:f.close()
    

    4. 异常捕获中的 else 语句

    else语句用于执行无异常时的代码:

    try:print(1 / 2)  # 无异常
    except Exception as e:print(e)
    else:print("没有发生异常,执行else语句")
    

    5. 异常捕获中的 finally 语句

    finally语句用于无论是否发生异常都必须执行的代码(如关闭文件):

    try:f = open('python.txt', 'r', encoding='utf-8')content = f.readlines()
    except:print("发生异常")f = open('python.txt', 'w', encoding='utf-8')f.write('异常时创建')
    else:print("无异常,内容:", content)
    finally:f.close()  # 无论是否异常都关闭文件print("finally语句必执行")
    

    总结

    文件操作是 Python 处理数据持久化的基础,掌握open()、read()、write()、close()等方法,以及os模块的文件和文件夹操作,能让你轻松管理计算机中的数据。而异常处理机制(try...except...else...finally)则能有效捕获和处理程序运行中的错误,提高程序的稳定性和健壮性。结合两者,可编写更可靠、实用的 Python 程序。

    http://www.xdnf.cn/news/18211.html

    相关文章:

  • Zemax光学设计输出3D
  • idea进阶技能掌握, 使用自带HTTP测试工具,完全可替代PostMan
  • OpenSSH 命令注入漏洞(CVE-2020-15778)修复,升级openssh9.8p1
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(一)基本代码
  • Qt设置软件使用期限【新版防修改系统时间】
  • React响应式链路
  • 【蒸蒸日上】专栏前言
  • Google Chrome v139.0.7258.139 便携增强版
  • 云手机在社交媒体场景中的优势体现在哪些方面?
  • 趣打印高级版--手机打印软件!软件支持多种不同的连接方式,打印神器有这一个就够了!
  • AutoGLM2.0背后的云手机和虚拟机分析(非使用案例)
  • Claude Code NPM 包发布命令
  • 数据挖掘笔记:点到线段的距离计算
  • GitHub宕机生存指南:从应急协作到高可用架构设计
  • [TryHackMe]Mr Robot CTF(hydra爆破+Wordpress更改主题)
  • Leetcode 深度优先搜索 (9)
  • MPR多平面重建一:初步实现
  • linux报permission denied问题
  • 【C语言16天强化训练】从基础入门到进阶:Day 4
  • 创建Vue项目的不同方式及项目规范化配置
  • 大数据常见问题分析与解决方案
  • 《SQLAlchemy 2 In Practice》读后感
  • C++开发/Qt开发:单例模式介绍与应用
  • IDEA:控制台中文乱码
  • Redis知识总结
  • 【机器学习深度学习】Ollama、vLLM、LMDeploy对比:选择适合你的 LLM 推理框架
  • MySQL高阶篇-数据库优化
  • 计算机网络模型
  • 企业通讯软件保证内部通讯安全,搭建数字安全体系
  • 建筑行业变革:用Three.js构建BIM数据可视化孪生平台