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

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.dtcms.com/a/340982.html

    相关文章:

  • 7.Kotlin的日期类
  • Flink实现Exactly-Once语义的完整技术分解
  • 自动驾驶导航信号使用方式调研
  • ABAP OOP革命:ALV报表面向对象改造深度实战
  • PiscCode使用MediaPipe Face Landmarker实现实时人脸特征点检测
  • Tomcat 性能优化终极指南
  • 从零开始学AI——13
  • 吴恩达 Machine Learning(Class 3)
  • MySQL 8.x的性能优化文档整理
  • JavaScript 性能优化实战(易懂版)
  • InfluxDB 查询性能优化实战(一)
  • 【PSINS工具箱】平面上的组合导航,观测量为位置、速度、航向角。附完整的MATLAB代码
  • sqli-labs通关笔记-第58关 GET字符型报错注入(单引号闭合 限制5次探测机会)
  • 六大缓存(Caching)策略揭秘:延迟与复杂性的完美平衡
  • git-git submodule和git subtree的使用方式
  • 大规模IP轮换对网站的影响(服务器压力、风控)
  • CISP-PTE之路--05文
  • 企业微信2025年发布会新功能解读:企业微信AI——2025年企业协作的「最优解」是如何炼成的?
  • 跨境电商独立站搭建多少钱?响应式设计 + 全球 CDN 加速服务
  • IBMS系统集成平台具备哪些管理优势?核心价值体现在哪里?
  • HTTP/1.1 与 HTTP/2 全面对比:性能革命的深度解析
  • 工控PID控制器学习总结
  • [element-plus] el-tree 拖拽到其他地方,不拖拽到树上
  • 怎么确定mongodb是不是链接上了?
  • 疏老师-python训练营-day51复习日+退款开始
  • AP数学课程AB和BC怎么选?AP数学课程培训机构推荐哪家?
  • Git 新手完全指南(一):从零开始掌握版本控制
  • .gitignore 文件 记录
  • git报错解决:ssh: connect to host github.com port 22: Connection refused
  • 阶跃星辰 StepFun 入驻 GitCode 平台,带来工业级 AI 体验