08.Python文件与异常(文件的open、write、read、seek方法总结+文件备份与OS类方法+异常处理机制及自定义异常+代码示例)

本文主要是介绍08.Python文件与异常(文件的open、write、read、seek方法总结+文件备份与OS类方法+异常处理机制及自定义异常+代码示例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

⽂件操作

open&write

open概述:是Python中用于打开文件的内置函数。通过一个文件路径作为参数,返回一个文件对象,用来读取、写入或操作文件。返回的文件对象需要定义变量进行接收,变量是否可进行写入追加等操作取决于 open 函数的 mode 类型。文件对象不用后需要使用 close() 关闭

open格式open(file, mode, buffering, encoding, errors, newline, closefd, opener)

PS:file 文件路径为必选项,其它均为可选项,mode 指定文件操作模式,较为常用。buffering 指定用于加载文件的缓冲区大小,encoding 指定文件的编码格式, errors 指定编码错误处理方式,newline 指定文本文件的换行符处理方式,, closefd 指是否在文件关闭时同时关闭文件描述符,opener 用于自定义文件打开器。

# Python默认省略的open参数
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

mode选项:常用模式可以主要可以分为三类,动作 r、w、a、x,文件b、t,以 + 操作,其中动作模式为基础模式,可单独使用,也以与文件、+进行组合使用。

文本模式

功能描述

r

只读模式(默认)

w

写入模式,如果文件存在则清空内容后重新写入,如果文件不存在则创建新文件

a

追加模式,在文件末尾添加新内容,如果文件不存在则创建新文件

x

创建模式,只能用于创建新文件,如果文件已存在则抛出异常

b

二进制模式,用于处理二进制文件

t

文本模式(默认),用于处理文本文件

+

读写模式,可同时进行读写操作

write概述:即写入操作,在 open 得到的返回对象不是只读对象时进行使用,根据 mode 的不同,大体可以分为覆盖写入w、创建写入x、追加写入a三种。

file_path = r'E:\2023\Python\1111.txt'
# 使用绝对路径打开文件
file = open(file_path, 'r')
content = file.read()
print(content)
file.close()
# 打开文件以写入模式写入内容
file = open('example.txt', 'w')
file.write('Hello, World!\n')  # 写入内容
file.close()
# 打开文件以独占创建模式写入内容
try:file = open('example.txt', 'x')file.write('Hello, World!\n')  # 写入内容file.close()
except FileExistsError:print("文件已经存在!")
read & seek

概述:Python 中提供了不同功能的读文件方法,如 read 、readlines、readline等。seek() 则用于移动文件指针,可以改变当前读取或写入操作的位置。

函数方法

功能描述

file_object.read( num )

从文件中读取长度为 num 字符的数据,默认省略表示所有

file_object.readline()

一次读取文件的一行内容

file_object.readlines()

将文件一次性读取放在一个列表中,每行作为一个元素

# 读取文件内容并打印
file = open('example.txt', 'r')# 使用 read(num) 方法读取文件内容
content1 = file.read(10)  # 读取前 10 个字符
print(content1)# 移动文件指针到文件开头读取,否则从第11个开始读
file.seek(0)# 使用 readline() 方法读取文件内容
line1 = file.readline()  # 读取第一行内容
print(line1)# 使用 readlines() 方法读取文件内容
lines = file.readlines()  # 读取剩余所有行内容,存储为列表
print(lines)file.close()
备份与os模块

文件备份:其本质是通过复制原始文件的内容,并将其保存到一个新的文件中,从而创建一个与原始文件内容相同的副本。

备份流程1、确定要备份的原始文件路径。

2、生成备份文件路径,可以在原始文件路径后添加特定的后缀或目录。

3、打开原始文件和备份文件,从原始文件读取内容,并将其写入备份文件。

4、关闭原始文件和备份文件。

5、完成备份过程,输出相应的成功信息或错误信息。

def backup_file(file_path):# 生成备份文件路径backup_path = file_path + '.bak'try:# 打开源文件和备份文件with open(file_path, 'rb') as src_file, open(backup_path, 'wb') as dest_file:# 从源文件读取内容并写入备份文件dest_file.write(src_file.read())print(f"成功创建文件备份:{backup_path}")except FileNotFoundError:print("源文件不存在")except IOError:print("备份文件创建失败")# 调用备份函数
file_path = 'example.txt'
backup_file(file_path)

os模块:是Python标准库中的一个内置模块,可进行文件和目录操作、文件路径操作、系统环境和变量设置、进程管理、文件权限和属性管理等功能。

import os# 文件和目录操作
os.mkdir('mydir')  			# 创建目录
os.rename('oldname.txt', 'newname.txt')  # 重命名文件
os.remove('file.txt')  		# 删除文件
os.rmdir('mydir')  			# 删除空目录
os.listdir('目录') 			# 获取目录列表
os.path.exists('file.txt')  # 判断文件是否存在
os.getcwd() 				# 获取当前目录# 文件路径操作
path = os.path.join('folder', 'file.txt')  # 拼接路径
dirname, basename = os.path.split('/path/to/file.txt')  # 分离路径
filename = os.path.basename('/path/to/file.txt')  # 获取文件名# 系统环境和变量
value = os.environ.get('HOME')  # 获取环境变量值
os.environ['PATH'] = '/usr/local/bin'  # 设置环境变量值
hostname = os.uname().nodename  # 获取主机名
current_dir = os.getcwd()  # 获取当前工作目录# 进程管理
pid = os.fork()  # 创建子进程
os.system('ls -l')  # 执行外部命令# 文件权限和属性
os.chmod('file.txt', 0o644)  # 修改文件权限
os.chown('file.txt', uid, gid)  # 修改文件所有者# 其他操作
os.execv('/bin/ls', ['ls', '-l'])  # 执行文件操作
timestamp = os.path.getmtime('file.txt')  # 获取文件修改时间
resolved_path = os.path.realpath('symlink.txt')  # 解析路径名中的符号链接

Python异常

基本结构

概述:是一种用于捕获和处理程序运行过程中可能出现的错误或异常情况的机制。通过使用异常处理,可以使程序在遇到错误时能够适当的处理和响应。Exception是所有程序异常类的父类。

相关关键字:

try:定义一个包含可能引发异常的代码块。

except:指定捕获特定类型异常的处理代码块。

else:可选关键字,指定在没有发生异常时执行的代码块。

finally:可选关键字,指定无论是否发生异常都会执行的代码块。

raise:用于重新抛出当前捕获的异常,将异常传递给上一级调用栈或更上层的异常处理代码进行处理。

as:用于将捕获的异常赋值给一个变量,以便在 except 代码块中访问异常对象的属性和方法。

try:# 可能引发异常的代码块,最好只放⼀行
except ExceptionType1:# 处理特定类型异常的代码块
except ExceptionType2:# 处理特定类型异常的代码块
...
else:# 没有发生异常时执行的代码块
finally:# 无论是否发生异常都会执行的代码块
异常使用

 多个异常捕获:可以把要捕获的异常类型的名字,放到except 后,并使⽤元组的方式进行书写。

try:print(1/0)
except (NameError, ZeroDivisionError):print('有错误')

捕获异常描述信息:即通过 as 将捕获到的特定类型的异常,并将异常的信息保存到一个变量中。

try:# 可能引发异常的代码块
except Exception as result:# 处理特定类型异常的代码块# 可以使用 result 变量访问异常信息
''' 捕获所有异常 '''
try:print(num)
except Exception as result:print(result)

异常的传递处理:当一个函数A调用了另一个函数B时,如果在函数B内部发生了异常并没有被捕获处理,那么该异常会向上层调用栈传递,直至找到合适的异常处理代码或导致程序终止,通常和 raise 一起使用。

def divide_numbers(a, b):try:result = a / breturn resultexcept ZeroDivisionError as err:print("除数不能为零")raise  # 重新抛出异常
def calculate_average(numbers):try:total = sum(numbers)average = divide_numbers(total, len(numbers))return averageexcept Exception as err:print("计算平均值时发生异常:", err)
numbers = []
average = calculate_average(numbers)
print("平均值:", average)

自定义异常类:需要自己定义一个类,并继承 Exception,通常根据实际情况自定义__init__以及__str__(self),前者可以使用默认,后者用于设置抛出异常的描述(打印)信息。

class ShortInputError(Exception):def __init__(self, length, min_len):self.length = lengthself.min_len = min_len# 设置抛出异常的描述信息def __str__(self):info = f'你输⼊的⻓度是{self.length}, 不能少于{self.min_len}个字符'return info
def main():try:pwd = input('请输⼊入密码:')if len(pwd) < 13:raise ShortInputError(len(pwd), 13)except Exception as result:passprint(result)else:print('密码已经输⼊入完成')
main()


这篇关于08.Python文件与异常(文件的open、write、read、seek方法总结+文件备份与OS类方法+异常处理机制及自定义异常+代码示例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/556390

相关文章

Java 接口定义变量的示例代码

《Java接口定义变量的示例代码》文章介绍了Java接口中的变量和方法,接口中的变量必须是publicstaticfinal的,用于定义常量,而方法默认是publicabstract的,必须由实现类... 在 Java 中,接口是一种抽象类型,用于定义类必须实现的方法。接口可以包含常量和方法,但不能包含实例

浅析python如何去掉字符串中最后一个字符

《浅析python如何去掉字符串中最后一个字符》在Python中,字符串是不可变对象,因此无法直接修改原字符串,但可以通过生成新字符串的方式去掉最后一个字符,本文整理了三种高效方法,希望对大家有所帮助... 目录方法1:切片操作(最推荐)方法2:长度计算索引方法3:拼接剩余字符(不推荐,仅作演示)关键注意事

自定义注解SpringBoot防重复提交AOP方法详解

《自定义注解SpringBoot防重复提交AOP方法详解》该文章描述了一个防止重复提交的流程,通过HttpServletRequest对象获取请求信息,生成唯一标识,使用Redis分布式锁判断请求是否... 目录防重复提交流程引入依赖properties配置自定义注解切面Redis工具类controller

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

Python自动化提取多个Word文档的文本

《Python自动化提取多个Word文档的文本》在日常工作和学习中,我们经常需要处理大量的Word文档,本文将深入探讨如何利用Python批量提取Word文档中的文本内容,帮助你解放生产力,感兴趣的小... 目录为什么需要批量提取Word文档文本批量提取Word文本的核心技术与工具安装 Spire.Doc

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

mybatis-plus分表实现案例(附示例代码)

《mybatis-plus分表实现案例(附示例代码)》MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,:本文主要介绍my... 目录文档说明数据库水平分表思路1. 为什么要水平分表2. 核心设计要点3.基于数据库水平分表注意事项示例

Nginx 访问控制的多种方法

《Nginx访问控制的多种方法》本文系统介绍了Nginx实现Web访问控制的多种方法,包括IP黑白名单、路径/方法/参数控制、HTTP基本认证、防盗链机制、客户端证书校验、限速限流、地理位置控制等基... 目录一、IP 白名单与黑名单1. 允许/拒绝指定IP2. 全局黑名单二、基于路径、方法、参数的访问控制

Mybatis的mapper文件中#和$的区别示例解析

《Mybatis的mapper文件中#和$的区别示例解析》MyBatis的mapper文件中,#{}和${}是两种参数占位符,核心差异在于参数解析方式、SQL注入风险、适用场景,以下从底层原理、使用场... 目录MyBATis 中 mapper 文件里 #{} 与 ${} 的核心区别一、核心区别对比表二、底