Python小白学习教程从入门到入坑------第二十九课 访问模式(语法进阶)

目录

一、访问模式

1.1  r

1.2  w

1.3  + 

1.3.1 r+

1.3.2 w+

1.3.3 a+

1.4 a



一、访问模式

模式可做操作若文件不存在是否覆盖
r只能读报错-
r+可读可写报错
w只能写创建
w+可读可写创建
a只能写创建否,追加写
a+可读可写创建否,追加写

1.1  r

r:只读模式(默认模式),文件必须存在,不存在就会报错

以下是关于这种模式的一些关键点:

只读模式:使用'r'模式打开文件时,您只能读取文件的内容,不能写入或修改它

文件必须存在:在尝试以 'r' 模式打开文件之前,该文件必须已经存在于文件系统中。如果文件不存在,open()函数将抛出一个FileNotFoundError异常 

默认模式:如果您在调用open()函数时没有指定模式参数,Python将默认使用'r'模式

异常处理:由于文件可能不存在,因此通常建议在尝试打开文件时使用异常处理来捕获FileNotFoundError,从而避免程序因未处理的异常而崩溃

首先我们在 py1文件夹中新建一个文件名为 example.txt,如下图所示:


eg: 

f = open('example.txt','r')  # 默认就是r
f.write('...')
f.close()
# 报错,使用'r'模式打开文件时,您只能读取文件的内容,不能写入或修改它

下面是一个使用 'r' 模式打开文件的示例,包括异常处理:

try:# 尝试以只读模式打开文件with open('example.txt', 'r', encoding='utf-8') as file:# 读取文件内容content = file.read()# 处理文件内容print(content)
except FileNotFoundError:# 如果文件不存在,则打印错误消息print("The file 'example.txt' does not exist.")

在这个示例中,我们使用了try...except语句来捕获FileNotFoundError异常,并在文件不存在时打印一条错误消息

使用with语句可以确保文件在读取后被正确关闭,即使在读取过程中发生异常也是如此

1.2  w

w:只写模式。文件存在就会先清空文件内容,再写入添加内容,不存在就创建新文件

关于 'w' 模式的一些详细解释:

只写模式:在这种模式下,文件被打开仅用于写入。尝试从文件中读取内容将会失败,并可能引发

异常(尽管在 'w' 模式下通常不会尝试读取)

清空文件内容:如果指定的文件已经存在,'w' 模式会截断(即清空)该文件的所有内容。这意味着文件将变得为空,然后您可以开始写入新的内容

创建新文件:如果指定的文件不存在,'w' 模式将创建一个新文件,并允许您向其中写入内容

使用场景:'w' 模式适用于您想要覆盖文件的现有内容,或者当您确信文件内容不再需要并且想要

写入全新内容的场景

下面是一个使用 'w' 模式的示例:

# 假设 example.txt 文件已经存在,并且包含一些内容
try:with open('example.txt', 'w', encoding='utf-8') as file:# 这将清空 example.txt 的内容,并写入新的内容file.write("This is the new content of the file.\n")
except IOError as e:# 捕获并处理可能发生的 IO 错误print(f"An error occurred: {e}")

在这个示例中,example.txt 文件的内容将被清空,并替换为 "This is the new content of the file.\n"

如果 example.txt 文件不存在,它将被创建,并包含这段新内容

请务必小心使用 'w' 模式,因为一旦文件被打开并写入,其原有内容将无法恢复。如果您只是想向文件追加内容而不清空它,应该使用 'a'(追加)模式

1.3  + 

+ :表示可以同时读写某个文件

注意:使用 + 会影响文件的读写效率,开发过程中更多时候会以只读、只写的方式来操作文件

r+ :可读写文件,文件不存在就会报错

w+ :先写再读,文件存在就重新编辑文件,不存在就创建新文件

1.3.1 r+

含义:表示以读写模式打开一个文件。这意味着你可以同时读取文件的内容和向文件中写入新的内容或修改现有内容。

文件存在性:文件必须已经存在。如果尝试用 r+ 模式打开一个不存在的文件,Python会抛出一个 FileNotFoundError 异常。

指针位置:当文件以 r+ 模式打开时,文件的读写指针(也称为文件指针或文件游标)位于文件的开头。这意味着如果你立即开始写入,新内容会覆盖文件开头的内容。

使用场景:适用于需要同时读取和修改文件内容的场景。

eg:以下是一个使用 r+ 模式打开文件并修改其内容的示例(涉及到文件指针,在下文中会讲述)

# 假设有一个名为 'example.txt' 的文件,其内容为 "Hello, World!"try:with open('example.txt', 'r+') as file:# 读取文件的前几个字符content = file.read(5)  # 读取 "Hello"print("读取的内容:", content)# 将文件指针移动到文件的开头file.seek(0)# 写入新的内容到文件开头,覆盖原有内容file.write("Hi!")# 将文件指针移动到文件末尾,并添加新的内容file.seek(0, 2)  # 0表示相对于文件末尾,2表示文件末尾file.write(", Python!")# 再次读取整个文件内容以显示修改file.seek(0)modified_content = file.read()print("修改后的内容:", modified_content)except FileNotFoundError:print("文件不存在,无法以 r+ 模式打开。")

输出内容为:

读取的内容: Hello
修改后的内容: Hi!lo, World!
This is a new file or an overwritten one.
, Python!

 注意:

1、使用 r+ 模式时要小心,因为写入操作可能会覆盖文件中的现有内容

2、如果只是想读取文件而不打算修改它,使用 r 模式更为合适

3、如果文件不存在但需要创建它并写入内容,应使用 w 或 w+ 模式

4、如果需要在文件末尾追加内容而不覆盖现有内容,使用 a 或 a+ 模式

1.3.2 w+

含义:表示以读写模式打开一个文件,但会先清空文件内容(如果文件已存在)。这意味着,当你以 w+ 模式打开文件时,文件中的所有现有数据都会被删除,然后你可以开始写入新的数据。写入后,你还可以读取这些数据或文件中后续添加的数据

文件存在性:

如果文件已存在,其内容会被清空,然后你可以开始新的读写操作

如果文件不存在,会创建一个新文件,然后你可以开始读写操作

指针位置:当文件以 w+ 模式打开时,文件的读写指针位于文件的开头,但此时文件是空的(因为

原有内容已被清空)

使用场景:适用于需要完全覆盖文件内容的场景,同时还需要在写入后读取文件内容的场景

eg:以下是一个使用 w+ 模式打开文件、写入内容并读取它们的示例

# 假设我们要创建一个名为 'example.txt' 的文件,或覆盖一个已存在的同名文件with open('example.txt', 'w+') as file:# 写入内容到文件file.write("Hello, World!\n")file.write("This is a new file or an overwritten one.\n")# 将文件指针移动到文件的开头以读取内容file.seek(0)# 读取并打印文件内容content = file.read()print("文件内容:")print(content)

输出为:

文件内容:
Hello, World!
This is a new file or an overwritten one.

注意:

1、使用 w+ 模式时要非常小心,因为它会清空文件中的所有现有内容。如果你只是想在文件末尾追加内容,应该使用 a 或 a+ 模式

2、在写入数据后,如果你想读取这些数据,你需要使用 seek() 方法将文件指针移动到文件的开头或你希望读取的位置

3、由于 w+ 模式会清空文件内容,因此它通常用于需要完全替换文件内容的场景。如果你只是想修改文件的一部分内容,可能需要先读取整个文件,修改所需的部分,然后再将修改后的内容写回文件(这通常涉及到使用临时文件或内存中的数据结构来存储修改后的内容)

1.3.3 a+

含义:表示以读写模式打开一个文件,但所有的写入操作都会发生在文件末尾,即追加内容。同时,该模式也允许读取文件的内容(在 'a' 模式下,只能进行写入操作,不能进行读取操作)

文件存在性:

如果文件已存在,写入操作会在文件末尾追加内容,而不会覆盖或删除文件中的现有数据

如果文件不存在,会创建一个新文件,然后你可以开始追加内容和读取操作

指针位置:当文件以 'a+' 模式打开时,文件的读写指针默认位于文件的末尾,因此如果立即进行读取操作,你将从文件的末尾开始读取(通常什么也得不到,除非之前已经写入了内容并又将指针移回了文件的开头或中间)

使用场景:适用于需要在文件末尾追加内容,同时还需要读取文件内容的场景

eg:以下是一个使用 'a+' 模式打开文件、追加内容并读取它们的示例

# 假设我们有一个名为 'example.txt' 的文件,或者我们将创建一个这样的文件# 首先,我们可能想以写入模式(例如 'w+')创建或覆盖文件,并写入一些初始内容
# 但为了这个示例的完整性,我们假设文件已经存在或我们将通过 'a+' 模式创建它with open('example.txt', 'a+') as file:# 追加内容到文件末尾file.write("This is an appended line.\n")# 由于写入后指针仍在文件末尾,我们需要将其移动回文件的开头以读取内容file.seek(0)# 读取并打印文件内容content = file.read()print("文件内容:")print(content)

输出内容:

文件内容:
Hi!lo, World!
This is a new file or an overwritten one.
, Python!This is an appended line.

1.4 a

在Python的文件操作中,'a' 模式被称为追加模式。这个模式允许你在一个已存在的文件末尾添加新的内容,而不会覆盖或删除文件中的现有数据。如果指定的文件不存在,使用 'a' 模式会创建一个新文件,并在其中开始写入数据。

追加内容:所有写入操作都会发生在文件的末尾,这意味着你不会丢失文件中的任何现有数据

文件存在性:

如果文件已存在,写入操作会追加到文件末尾

如果文件不存在,会创建一个新文件

读取限制:在标准的 'a' 模式下,你不能读取文件的内容。如果你需要读取文件,应该使用 'a+' 模式

文件指针位置:当文件以 'a' 模式打开时,文件指针默认位于文件末尾,准备进行写入操作

使用场景:

1、当你需要向一个日志文件、数据收集文件或任何需要持续追加新内容的文件中添加信息时,'a' 模式非常有用

2、适用于不需要读取文件内容,只需在文件末尾添加新数据的场景

eg:以下是一个使用 'a' 模式打开文件并追加内容的示例

# 假设我们有一个名为 'example.txt' 的文件,或者我们将创建一个这样的文件with open('example.txt', 'a') as file:# 追加内容到文件末尾file.write("This is a new log entry.\n")# 注意:在 'a' 模式下,你不能直接读取文件内容# 如果你需要读取内容,应该使用 'a+' 模式并在读取前使用 seek() 方法

此刻在 example.txt 文件中新增了:This is a new log entry.


今天的分享就到这里了,希望能帮助到大家~

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

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

相关文章

【Linux】Linux入门实操——vim、目录结构、远程登录、重启注销

一、Linux 概述 1. 应用领域 服务器领域 linux在服务器领域是最强的,因为它免费、开源、稳定。 嵌入式领域 它的内核最小可以达到几百KB, 可根据需求对软件剪裁,近些年在嵌入式领域得到了很大的应用。 主要应用:机顶盒、数字电视、网络…

十三:java web(5)-- Spring数据持久层

目录 Spring 数据持久层 1. Spring 与 JDBC 1.1 使用 Spring 管理数据库连接 1.1.2 Apache Commons DBCP 基于配置文件xml 使用 1.1.3 Apache Commons DBCP 基于配置类使用 1.1.4 HikariCP 基于配置文件xml 使用 推荐使用 Spring Boot 默认连接池 1.1.5 HikariCP 基于配置…

uniApp之uni-file-picker使用踩坑

标题党~也不算坑吧 就是初体验 上传是需要存储一下子的,我以为uniApp是自己免费开的服务给大家中转使用,就没管这个事,但是官网是这么说的: 就我是怎么发现的,使用了一段时间后,上传的图片都裂了&#xff…

开源竞争-大数据项目期末考核

开源竞争: 自己没有办法完全掌握技术的时候就开源这个技术,培养出更多的技术依赖,让更多人完善你的技术,那么这不就是在砸罐子吗?一个行业里面总会有人砸罐子的,你不如先砸还能听个想。 客观现实&#xf…

Flutter3.22.2中SliverAppBar设置背景色滑动显示颜色错误

在使用Flutter项目开发中,可能会有页面需要滑动收起标题栏的效果,一般都会使用SliverAppBar来实现,当项目的Flutter的SDK版本升级到3.4后,发现使用了SliverAppBar的页面,在滑动过程中,标题栏和状态栏的颜色…

SpringBoot3中swagger无法使用

前言 springboot 3开始javax包改成了jakarta,而swagger-oas等包中依然使用的是javax,所以报错。另外springfox已经停止更新有段时间了,并且不支持OpenAPI 3标准,升级Springboot 3.0以后会有更多问题暴露出来。而SpringBoot 3只支…

使用docker安装zlmediakit服务(zlm)

zlmediakit安装 zlmediakit安装需要依赖环境和系统配置,所以采用docker的方式来安装不容易出错。 docker pull拉取镜像(最新) docker pull zlmediakit/zlmediakit:master然后先运行起来 sudo docker run -d -p 1935:1935 -p 80:80 -p 8554:554 -p 10000:10000 -p …

第九周预习报告

文章目录 密码系统设计第九周预习报告学习内容AI 对学习内容的总结(1分)要求总结 对 AI 总结的反思与补充(2分)反思与补充 补充内容反思学习思维导图(2分)要求思维导图代码导图 基于 AI 的学习(…

GB/T 43206—2023信息安全技术信息系统密码应用测评要求(五)

文章目录 附录AA.1 概述A.2 密钥产生A.3 密钥分发A.4 密钥存储A.5 密钥使用A.6 密钥更新A.7 密钥归档A. 8 密钥撤销A.9 密钥备份A.10 密钥恢复A.11 密钥销毁 附录B附录C 附录A A.1 概述 密钥管理对于保证密钥全生存周期的安全性至关重要 ,可以保证密钥(除公开密钥外) 不被非授…

phpstudy 使用php8.2.9版本报错问题

phpstudy 使用php8.2.9版本报错问题 1、如果php8的扩展控制面板开启无效的话,可以手动开启试试 2、php有报错日志: Fatal error: Directive ‘track_errors’ is no longer available in PHP in Unknown on line 0 在切换php版本到更高版本时在终端查…

【科普小白】LLM大语言模型的基本原理

一、要了解LLM大模型的基本原理就要先来了解一下自然语言处理(NLP)。 NLP 是 AI 的一个子领域,专注于使计算机能够处理、解释和生成人类语言,主要任务包括:文本分类、自动翻译、问题回答、生成文本等。到底是NLP促生了…

初识网络编程TCP/IP

目录 前言相关名词解释应用层协议——HTTP传输层协议socketTCP帧头格式三次握手、四次挥手 UDPTCP的socket实现 参考博文 前言 刚碰到网络编程,会出现一堆协议、概念、这层次那技术的,头都大了,还是得总结总结…… 相关名词解释 ✨✨网络…

整合本地市场机会 同城小程序打造社区商圈

同城市场中,商家与消费者之间的互动和交易模式正在发生深刻变化,同城小程序成为了企业、商户和消费者之间连接的桥梁,成为打造社区商圈、整合本地市场机会的重要工具。今天小编分享,同城小程序怎么一个软件整合以前十几个APP做的事…

安当ASP系统:适合中小企业的轻量级Radius认证服务器

安当ASP(Authentication Service Platform)身份认证系统是一款功能强大的身份认证服务平台,特别适用于中小企业。其中,简约型Radius认证服务器是安当ASP系统中的一个重要组成部分。以下是对该系统的详细介绍: 一、主要…

(一)<江科大STM32>——软件环境搭建+新建工程步骤

一、软件环境搭建 (1)安装 Keil5 MDK 文件路径:江科大stm32入门教程资料/Keil5 MDK/MDK524a.EXE,安装即可,路径不能有中文。 (2)安装器件支持包 文件路径:江科大stm32入门教程资料…

面试经典 150 题:121,125

121. 买卖股票的最佳时机 【参考代码】 动态规划解决 class Solution { public:int maxProfit(vector<int>& prices) {int size prices.size();int min_price 99999, max_profit 0;for(int i0; i<size; i){if(prices[i] < min_price){min_price prices[i…

Spring boot 读模块项目升级为spring cloud 项目步骤以及问题

1.结构说明 bean 模块 &#xff0c;public 模块&#xff0c; client 模块&#xff0c; erp模块&#xff0c;system 主模块。 2.环境说明以及pom 原本环境 新环境 mysql 5.7 -------------- mysql 8.0 maven 3.9.6 jdk 8 -----------…

Linux系统-初始化

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 这是Linux进阶部分的最后一大章。讲完这一章以后&#xff0c;我们Linux进阶部分讲完以后&#xff0c;我们的Linux操作部分就…

element-plus的Tree 树形控件添加图标

该文章为本菜鸡学习记录&#xff0c;如有错误还请大佬指教 本人刚开始接触vue框架&#xff0c;在使用element-plus组件想实现树形控件&#xff0c;发现官网的组件示例没有图标区分显示 实现效果 代码 <temple 部分 <el-tree :data"data" node-click"hand…

【详细 工程向】基于Smart3D的五镜头相机三维重建

数据部分&#xff1a; 数据要求 &#xff08;1&#xff09;每条行带至少从 3 个不同的视角进行拍摄。 &#xff08;2&#xff09;相邻相片之间的重叠度通常要求大于三分之二。 &#xff08;3&#xff09;不同拍摄视角之间夹角应该少于 15 度。 &#xff08;4&#xff09;通…