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()


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/588443.shtml

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

相关文章

rosdep init/update失败(转载)

sudo rosdep init rosdep update 如果你直接成功了&#xff0c;可直接跳过当我没说&#xff08;不过90%的几率你都会失败的啦&#xff09; 由于http://raw.githubusercontent.com这个网址墙的很厉害&#xff0c;大概率你是成功不了的&#xff0c;这里推荐一种本地化安装的方法…

【Leetcode】1154. 一年中的第几天

文章目录 题目思路代码 题目 1154. 一年中的第几天链接 思路 题目要求是给定一个字符串 date&#xff0c;它代表一个日期&#xff0c;采用标准的 YYYY-MM-DD 格式。需要计算这个日期是当年的第几天。 首先&#xff0c;我们可以通过字符串的索引来提取年、月和日的数值&…

二维动态规划问题,python解决最长回文子串

一个算法中的经典问题&#xff0c;求最长回文子串问题&#xff0c;其实是可以归于二维动态规划问题。 对于给定的一个字符串中&#xff0c;找到这个字符串中的回文子串&#xff0c;回文子串的概念是从前往后正向的读和从后往前反向的读都是完全相同的字符串。 对这个问题进行…

el-date-picker周选择器获取选择的日期范围

<el-date-pickerv-model"formData.date"type"week"format"yyyy 第 WW 周"placeholder"选择周"change"weekChange"> </el-date-picker>// 方法一&#xff1a;weekChange(val) {let startTime new Date(val.getT…

猪目标检测数据集VOC格式600张

猪是一种常见的哺乳动物&#xff0c;通常被人们认为是肉食动物&#xff0c;但实际上猪是杂食性动物&#xff0c;以植物性食物为主&#xff0c;也有偶尔食肉的习性。猪的体型较大&#xff0c;圆胖的体型和圆润的脸庞使其显得憨态可掬。它们主要通过嗅觉来感知周围环境&#xff0…

Windows操作系统简介

Windows操作系统简介 为什么要学习Windows操作系统呢&#xff0c;了解Windows系统结构&#xff0c;可以让我们快速学习Linux操作系统&#xff0c;通过对比学习的方法&#xff0c;我们可以更快的学会Linux。 计算机硬件组成包括&#xff1a; CPU、内存、网卡、硬盘、DVD光驱、…

RuntimeError: The NVIDIA driver on your system is too old.

【报错】使用 AutoDL 复现实验时遇到 RuntimeError: The NVIDIA driver on your system is too old (found version 11070). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternativ…

CentOS:docker同一容器间通信

docker同一容器中不同服务以别名访问 1、创建bridge网络 docker network create testnet 2、查看Docker网络 docker network ls 3、运行容器连接到testnet网络 使用方法&#xff1a;docker run -it --name <容器名> —network --network-alias <网络别名> <…

docker配置buildx插件

一、介绍 Docker buildx是docker的一个插件 支持Moby BuildKit的所有特性 可以跨CPU架构编译镜像 可以在多节点编译镜像 二、前提 使用 buildx 作为 docker CLI 插件需要使用 Docker 19.03 或更新版本。 三、配置步骤 1&#xff09;客户端&#xff1a;在客户端的配置文…

Vue3使用事件总线(Event Bus)实现发布订阅模式

Vue3使用事件总线&#xff08;Event Bus&#xff09;实现发布订阅模式 在Vue.js中&#xff0c;订阅发布模式&#xff08;也称为发布-订阅模式或Pub/Sub模式&#xff09;是一种设计模式&#xff0c;用于促进组件或对象之间的松散耦合。这种模式允许组件相互通信&#xff0c;而无…

python读取xlsx格式的excel

读取excel表格数据最好用的还是pandas库 首先是安装pandas pip install pandas 引入pandas import pandas as pd 读取excel&#xff0c;xlsx格式数据 # 读取xlsx格式的数据 def readexcel():df pd.read_excel("./test.xlsx",headerNone)df.columns df.iloc[4…

《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识(17)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识&#xff08;16&#xff09; 1.4 PCI总线的中断机制 PCI总线使用INTA#、INTB#、INTC#和INTD#信号向处理器发出中断请求。这些中断请求信号为低电平有效&#xff0c;并与处理器的中…

kivy中的GridLayout

说明 GridLayout 是 Kivy 框架中的一个布局管理器&#xff0c;它允许你在网格中排列子控件。你可以指定网格的行数和列数&#xff0c;然后添加子控件到网格中。GridLayout 会自动调整子控件的位置和大小&#xff0c;以适应网格的单元格。 在 Kivy 框架中&#xff0c;size_hint…

Plantuml之EBNF语法介绍(二十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

多线程编程设计模式(单例,阻塞队列,定时器,线程池)

&#x1f495;"只有首先看到事情的可能性&#xff0c;才会有发生的机会。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;多线程编程设计模式(单例,阻塞队列,定时器,线程池) 本文主要讲解多线程编程中常用到的设计模式,包括单例模式,阻塞队列,定时…

基于SpringBoot的校园失物招领网站

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的校园失物招领网站,java…

C语言KR圣经笔记 5.1指针和地址 5.2指针和函数参数

第五章 指针和数组 指针是包含变量地址的变量。在 C 语言中&#xff0c;指针被大量使用&#xff0c;部分原因是有时只能用指针来表达某种计算&#xff0c;而部分原因是相比其他方式&#xff0c;指针通常能带来更紧凑和高效的代码。指针和数组是紧密关联的&#xff1b;本章也讲…

2024年【安全员-B证】考试报名及安全员-B证新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-B证考试报名考前必练&#xff01;安全生产模拟考试一点通每个月更新安全员-B证新版试题题目及答案&#xff01;多做几遍&#xff0c;其实通过安全员-B证考试试题很简单。 1、【多选题】《中华人民共和国消防法…

深入理解WPF MVVM:探索数据绑定与命令的优雅之道

引言&#xff1a; WPF&#xff08;Windows Presentation Foundation&#xff09;是一种用于创建富客户端应用程序的框架&#xff0c;而MVVM&#xff08;Model-View-ViewModel&#xff09;则是一种在WPF中使用的架构模式。MVVM提供了一种优雅的方式来组织和管理应用程序的代码&a…

(2023)PanGu-Draw:通过时间解耦训练和可重用的 Coop-Diffusion 推进资源高效的文本到图像合成

PanGu-Draw: Advancing Resource-Efficient Text-to-Image Synthesis with Time-Decoupled Training and Reusable Coop-Diffusion 公众&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要…