版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python基础与应用主讲:TheIntroductionandApplicationofPythonPart7第七章07文件与异常处理FileandExceptionHandling学习内容本章重点与难点本章重点KeyPoints文件操作:掌握文本与二进制文件读写文件模式:理解不同文件打开模式选择with语句:安全管理文件资源,自动关闭异常处理:编写健壮程序,应对错误本章难点Difficulties读写复杂性:灵活运用各类读写方法异常设计:合理设计异常捕获与处理学习建议:多动手编写代码,尝试处理不同类型的文件和异常情况,加深对文件操作机制的理解。第一节文件操作07文件与异常处理FileandExceptionHandling7.1文件操作-文件与文件路径文件类型分类文本文件:基于字符编码(如UTF-8),可直接阅读,如.txt,.py二进制文件:以字节为单位存储,需特定软件解析,如图片、视频文件路径表示绝对路径(AbsolutePath)从根目录开始的完整路径,指向唯一位置。例:C:\Users\user\file.txt相对路径(RelativePath)相对于当前工作目录的路径,灵活便捷。例:./data/file.txt跨平台兼容:使用os.path.join()处理路径分隔符路径检查:使用os.path.exists()验证路径存在性路径表示示例绝对路径(AbsolutePath)Windows系统C:\Users\Username\Documents\file.txtLinux/macOS系统/home/username/documents/file.txt相对路径(RelativePath)当前目录下(CurrentDirectory)./config/settings.ini上一级目录下(ParentDirectory)../data/input.txt核心区别:绝对路径从根目录(如C:\或/)开始,是文件的完整地址;相对路径相对于当前工作目录,使用.和..进行导航,更加灵活且与具体盘符无关。文件操作基本流程1.打开文件使用open()函数,指定文件名和打开模式,获得文件对象。2.操作文件通过文件对象进行读、写、追加等核心数据处理操作。3.关闭文件使用close()方法关闭文件,释放系统资源,确保数据安全。文件打开模式详解'r'只读模式(默认)文件不存在则报错,只能读取内容。'w'写入模式文件存在则覆盖,不存在则创建新文件。'a'追加模式写入内容到文件末尾,保留原有数据。'b'二进制模式与其他模式组合使用(如'rb','wb')。'+'更新模式允许同时对文件进行读写操作。常见组合示例'rb'读二进制,'wb+'写二进制并可读。注意事项:使用'w'模式时务必小心,它会直接清空并覆盖原有文件内容,无法恢复。建议在不确定时先使用'r'模式查看。使用with语句管理资源手动关闭(不推荐)file=open('example.txt','r')content=file.read()file.close()#必须手动调用风险:容易忘记调用close(),导致资源占用。自动关闭(推荐)withopen('example.txt','r')asfile:content=file.read()#代码块结束,文件自动关闭优势:代码块结束自动释放资源,更简洁。核心优势:异常安全(ExceptionSafety)即使在读写过程中发生异常(如IOError),with语句也能确保文件被正确关闭,避免资源泄漏。这是Python中处理文件的最佳实践。进入代码块时自动打开文件,退出时自动关闭,无需手动调用close()方法。文本文件读取方法read()读取整个文件内容,返回字符串。适合小文件快速读取。content=file.read()readline()逐行读取文件内容。适合处理大文件或需要逐行解析的场景。line=file.readline()readlines()读取所有行,返回字符串列表。方便对每一行数据进行处理。lines=file.readlines()核心差异总结:•read():一次性加载,内存占用大,速度快。•readline():逐行加载,内存占用小,适合超大文件。•readlines():列表形式存储,便于索引和随机访问。文本文件读取方法使用forlineinfile逐行读取适合处理大文件,避免内存溢出更省内存,效率更高。核心差异总结:•read():一次性加载,内存占用大,速度快。•readline():逐行加载,内存占用小,适合超大文件。•readlines():列表形式存储,便于索引和随机访问。逐行遍历#逐行读取forlinein
open('file.txt','r'):
print(line.strip())在open()中指定encoding='utf-8'正确处理中文字符避免乱码问题#指定编码with
open('file.txt','r',encoding='utf-8')asf:content=f.read()编码处理二进制文件的读取直接读取字节流适用于图片、音频等非结构化数据,不关心内部结构。#以二进制只读模式打开withopen("image.png","rb")asf:raw_bytes=f.read()#返回bytes类型的字节串结构化解析适用于已知格式的数据(如struct.pack写入),需解析为具体类型。importstructwithopen("data.bin","rb")asf:data=f.read()int_val,float_val=struct.unpack("if",data)核心区别:直接读取关注“流”本身,结构化解析关注“数据结构”与“类型还原”。文本文件写入方法write()方法功能:写入单个字符串。withopen("file.txt","w")asf:f.write("Hello,World!\n")f.write("这是第二行。")writelines()方法功能:写入字符串列表,需手动换行。lines=["第一行\n","第二行\n","第三行"]withopen("file.txt","w")asf:f.writelines(lines)注意事项:使用writelines()时,系统不会自动在列表元素之间添加换行符,需要在每个字符串末尾手动添加'\n'。二进制文件的写入核心原理:数据打包在Python中写入二进制文件,通常需要先将数据序列化为字节串。推荐使用struct模块,它提供了将Python数据类型(如整数、字符串)转换为C语言结构体的机制,便于底层数据交互。代码实现:打包并写入importstruct#定义格式:10字节字符串+整数fmt='10si'data=("Beijing".encode('utf-8'),2186)packed=struct.pack(fmt,*data)withopen("population.bin","wb")asf:f.write(packed)关键要点1.格式定义:使用格式字符(如's'代表字符串,'i'代表整数)定义数据结构。_2.打开模式:务必使用"wb"模式打开文件,确保以二进制方式写入。第二节异常处理07文件与异常处理FileandExceptionHandlingExceptionHandlingMechanism什么是异常?异常(Exception)程序运行时发生的错误或意外情况,会中断程序的正常执行流程。错误示例:除以零#这行代码会引发ZeroDivisionErrorresult=10/0常见异常类型FileNotFoundError尝试打开不存在的文件ZeroDivisionError数学运算中除以零ValueError传入无效的参数值(如转数字失败)TypeError操作或函数应用于错误类型的对象异常捕获:try-except语句基本语法结构(BasicStructure)try:
#可能引发异常的代码
risky_code()exceptExceptionType:
#处理该类型异常的代码
handle_exception()示例:安全读取文件try:f=open("file.txt","r")content=f.read()exceptFileNotFoundError:print("错误:文件不存在!")核心机制:将可能出错的代码放入try块。若发生异常,程序不崩溃,而是跳转到对应的except块执行容错逻辑。异常处理的扩展:else与finallyelse子句仅当try块中没有发生异常时执行。常用于代码正常执行后的收尾或确认工作。finally子句无论是否发生异常,都会执行。常用于资源清理(如关闭文件、释放锁)等必须执行的操作。完整代码示例try:num=int(input("请输入整数:"))result=10/numexceptValueError:print("错误:请输入有效整数")exceptZeroDivisionError:print("错误:除数不能为零")else:print(f"结果:10/{num}={result}")finally:print("程序执行完毕。")核心逻辑总结:Try-Except结构中,Else块是“成功的奖励”,Finally块是“最后的防线”。这种组合能让代码逻辑更清晰,资源管理更安全。主动抛出异常:raise语句抛出内置异常defcheck_age(age):ifage<0:raiseValueError("年龄不能为负数")returnage当参数校验不通过时,使用raise主动抛出ValueError异常,中断程序执行。自定义异常classInvalidEmailError(Exception):passif"@"notinemail:raiseInvalidEmailError("无效邮箱")继承Exception类创建专属异常,使错误信息更具业务语义。核心要点总结raise语句用于主动触发异常。在内置异常无法满足业务需求时,推荐定义清晰的自定义异常类,这不仅能提高代码的可读性,也能让错误处理逻辑更加精准。综合案例:安全的文件读取器safe_reader.pydefsafe_read_file(file_path):try:withopen(file_path,'r',encoding='utf-8’)asf:content=f.read()print("文件读取成功!")returncontentexceptFileNotFoundError:print(f"错误:文件不存在")exceptPermissionError:print(f"错误:权限不足")exceptExceptionase:print(f"未知错误:{e}")returnNone#调用函数safe_read_file("example.txt")规范文件操作使用with语句自动管理资源,确保文件句柄正确关闭,避免资源泄漏。多场景异常捕获针对性处理文件不存在、权限不足及编码错误等多种异常,增强程序健壮性。优雅的错误提示无论发生何种错误,程序均能给出明确的中文提示,便于调试和用户理解。核心要点:这个案例展示了如何编写“防御性”代码。通过try-except结构,我们将不可控的外部因素(如文件损坏、权限问题)转化为可控的程序逻辑,确保系统的稳定性。基本示例:自定义异常类safe_reader.pyclassNegativeNumberError(Exception):"""当输入负数时抛出的自定义异常"""
def__init__(self,number):self.number=numbersuper().__init__(f"输入的数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 创意工作总结计划伦敦风格完整版模板
- 面向程序基础设计 4
- 绿化苗木供货质量保证措施
- 扑火队长岗位责任制
- 2026年地方病防治技能竞赛(理论知识)冲刺试题及答案
- 煤矿测量工程师(技术员)岗位责任制
- 学校武术操比赛方案
- 河北省沧州市八县联考2025-2026学年高一下学期5月期中地理试卷
- 危重症患者的评估
- 2026年北京市西城区初三下学期二模语文试卷及答案
- 中北大学《数据结构》2025-2026学年第一学期期末试卷(A卷)
- 《大学生职业发展与就业指导新编(第2版)》高职全套教学课件
- 第5章第2节染色体变异高一下学期生物人教版必修2
- (三模)济南市2026届高三5月针对性训练地理试卷(含答案及解析)
- 食堂食品安全监控系统建设方案
- 马工程《公共财政概论》课后习题库(含)参考答案(可做期末复习和试卷)
- 山东省药品质量分析技能竞赛题库
- 全国各俞氏辈分收集
- 北斗卫星导航理论与应用课件(完整版)
- 2021浙江省抗菌药物临床应用分级管理目录
- 大家的日语34课
评论
0/150
提交评论