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.pswp.cn/web/94013.shtml
    繁体地址,请注明出处:http://hk.pswp.cn/web/94013.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    领码方案:通用物联网数据采集低代码集成平台——万物智联时代的黄金钥匙

    摘要: 领码方案通过“协议抽象层低代码引擎AI智能中枢”架构,实现物联网设备数据采集、存储、分析的零代码配置化集成。支持200工业协议即插即用,10分钟完成设备上云,数据流转效率提升70%,AI模型调用耗时降低90%。该方…

    后台管理系统-10-vue3之用户管理组件配置子路由和静态页面

    文章目录 1 配置子路由 1.1 router/index.js(添加路由) 1.2 views/User.vue(用户管理) 1.3 验证路由是否生效 2 User.vue(静态页面) 2.1 搜索框和表格的静态搭建 2.2 用户表格的数据获取渲染 2.2.1 user.js(准备数据) 2.2.2 mock.js(拦截请求的URL) 2.2.3 api.js(axios请求的UR…

    AMPAK正基科技系列产品有哪些广泛应用于IOT物联网

    關於正基AMPAK 智慧物聯網 無線射頻模組專家 專業品牌 正基科技是一家擁有超過 20 年無線模組研發、設計、生產、行銷與產品技術整合服務經驗的公司。 有專業的高頻模組硬體設計及軟體整合工程師團隊,具備豐富的客戶應用經驗,能因應客戶與市場導向的產品…

    【PyTorch】环境配置

    文章目录1. 配置cuda环境2. 配置conda环境3. 配置pytorch gpu环境1. 配置cuda环境 在命令行输入以下命令可以查看当前显卡驱动版本和最高支持的cuda版本 nvidia-smi根据cuda版本去官网下载并安装cuda 下载链接:https://developer.nvidia.com/cuda-toolkit-archive…

    vue3实现实现手机/PC端录音:recorder-core

    通过 recorder-core 这个插件实现录音recorder-core插件使用下方的js文件是安装后封装的一个js文件,在需要使用的地方直接引入这个文件:import record from “./recorderCore.js”;// 文件名称:recorderCore.js// recorder-core插件使用方式…

    deepseek 本地部署,如何支持工具调用

    这里需要考虑显卡是否和模型匹配,支不支持推理 先把模版拉取到本地:git clone https://github.com/sgl-project/sglang.git 我的位置是 /data/home/sglang 注意模版位于sglang下的examples/chat_template中 根据对应的模版部署模型,比如 …

    Excel中运行VB的函数

    “插入” -》 “模块”Function FormatCodeFlex(inputStr As String, Optional defaultVal As String "0") As StringOn Error GoTo ErrorHandlerDim parts() As StringDim i As Integer 使用 "-" 分割字符串parts Split(inputStr, "-") 确保至…

    《零基础入门AI:深度学习之NLP基础学习》

    一、自然语言处理(NLP)概述 1. 基本概念 ​ 自然语言处理(Natural Language Processing, NLP)是人工智能与计算语言学交叉的核心领域,致力于实现计算机对人类自然语言的自动理解、分析、生成与交互。其研究目标在于构…

    保姆级Debezium抽取SQL Server同步kafka

    前言: Debezium SQL Server连接器捕获SQL Server数据库模式中发生的行级更改。 官方2.0文档: Debezium connector for SQL Server :: Debezium Documentation 有关与此连接器兼容的SQL Server版本的信息,请参阅 SQL Server Database: 201…

    鸿蒙安卓前端中加载丢帧:ArkWeb分析

    序章:卡顿的数字世界 在每秒60帧的视觉交响乐中,每一帧都是精心编排的节拍。当这些节拍开始丢失——就像交响乐中突然静音的提琴部——我们便遭遇了加载丢帧的数字噩梦。这不是简单的性能下降,而是一场渲染管线的全面崩溃,是数字…

    Spring Cloud Netflix学习笔记06-Zuul

    文章目录概述什么是Zuul?Zuul 能干嘛?Zuul入门案例pom依赖application.yml启动类隐藏真实路径概述 什么是Zuul? Zuul包含了对请求的路由(用来跳转的)和过滤两个最主要功能: 其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外…

    c# 和 c++ 怎样结合

    c# 和 c 怎样结合在软件开发中,C# 和 C 通常用于不同的场景和目的,但有时需要将它们结合使用以充分利用两种语言的优点。以下是几种常见的方法来实现 C# 和 C 的结合:1. P/Invoke(Platform Invocation Services)P/Invo…

    开源分布式数据库(Dgraph)

    Dgraph 是一款专为处理复杂关系数据设计的开源分布式图数据库,核心目标是提供高性能、高可扩展性的图数据存储与查询能力。其设计融合了原生图模型与分布式架构,支持 GraphQL 查询语言,适用于社交网络、知识图谱、推荐系统等场景。 一、技术架…

    Apache ShenYu和Nacos之间的通信原理

    这是一个非常经典的服务注册发现和动态配置管理的案例。ShenYu 作为网关,需要实时感知后端微服务的上线、下线以及其元数据信息(如 API 接口列表)的变化,同时它自身的配置也可能需要动态调整。Nacos 则作为注册中心和配置中心,扮演了“服务电话簿”和“动态配置仓库”的角…

    强制重启导致Ubuntu24.04LTS amd的WIFI无法使用的解决方案

    强制重启导致Ubuntu24.04LTS amd的WIFI无法使用的解决方案 前言 ‍ 我按下了<ctrl><alt><prtsc>组合键&#xff0c;然后按住<ctrl><alt>不放&#xff0c;让我的死机的图形化的Ubuntu强制重启&#xff0c;然后再次打开发现&#xff0c;我的ubu…

    Java基础面试题02

    引用&#xff1a;&#xff08;代码随想录的八股转免费了&#xff09;以下为网址 卡码笔记 本文为学习以上文章的笔记&#xff0c;如果有时间推荐直接去原网址 Java中的数据类型有哪些&#xff1f;分为哪两大类&#xff1f; (考点&#xff1a;Java数据类型及其分类) 【简单】 基…

    RabbitMQ:SpringAMQP Fanout Exchange(扇型交换机)

    目录一、案例需求二、基础配置三、代码实现扇形交换机也叫做广播交换机&#xff0c;通过交换机将消息发送给所有的队列。 生产者源码 消费者源码 一、案例需求 在RabbitMQ控制台中&#xff0c;声明队列fanout.queue1和fanout.queue2。在RabbitMQ控制台中&#xff0c;声明交换…

    深度解析DeepSeek V3.1 :6850 亿参数开源模型如何以 71.6% 编码得分、68 倍成本优势重构全球 AI 竞争格局

    深度解析DeepSeek V3.1 &#xff1a;6850 亿参数开源模型如何以 71.6% 编码得分、68 倍成本优势重构全球 AI 竞争格局当DeepSeek悄然将其 6850 亿参数的 V3.1 模型上传至 Hugging Face 平台时&#xff0c;这个看似低调的举动却在全球 AI 领域投下了一颗 “深水炸弹”。这款融合…

    Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频内容理解与智能预警升级(401)

    Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频内容理解与智能预警升级&#xff08;401&#xff09;引言&#xff1a;正文&#xff1a;一、传统安防监控的 “三重困局”&#xff1a;看不全、看不懂、反应慢1.1 人工盯屏 “力不从心”1.1.1 摄像头密度与人力的矛盾1…

    ansible playbook 实战案例roles | 实现基于node_exporter的节点部署

    文章目录一、核心功能描述二、roles内容2.1 文件结构2.2 主配置文件2.3 tasks文件内容2.4 vars文件内容免费个人运维知识库&#xff0c;欢迎您的订阅&#xff1a;literator_ray.flowus.cn 一、核心功能描述 这个 Ansible Role 的核心功能是&#xff1a;​自动化部署 Prometheu…