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.


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

巡检任务管理系统(源码+文档+部署+讲解)

本文将深入解析“巡检任务管理系统”的项目,探究其架构、功能以及技术栈,并分享获取完整源码的途径。 系统概述 巡检任务管理、巡检抽查、巡检任务随机分派等功能 本项目名称为巡检管理系统,是对巡检工作进行数字化管理的系统。该系统适用…

自动驾驶系列—自动驾驶车辆的姿态与定位:IMU数据在复杂环境中的关键作用

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

如何运营Github Org

目录 前言 正文 关于分支保护 特别说明 如何在Windows环境下配置GitHub Desktop GPG签名? 推荐分支保护选择 关于good first issue 如何设置good first issue? 关于Project 尾声 🔭 Hi,I’m Pleasure1234🌱 I’m currently learni…

odrive代码阅读笔记

电机参数 电流环带宽 atan2 #include "float.h" #define MACRO_MAX(x, y) (((x) > (y)) ? (x) : (y)) #define MACRO_MIN(x, y) (((x) < (y)) ? (x) : (y)) #define f_abs(x) ((x > 0) ? x : -x) // based on https://math.stackexchange.com/a/11050…

笔记本怎么开启TPM2.0_笔记本开启TPM2.0教程(不同笔记本开启tpm2.0方法)

在win11最低要求是提示&#xff0c;电脑必须满足 TPM 2.0&#xff0c;并开需要开启TPM 才能正常安装windows11系统&#xff0c;有很多笔记本的用户问我&#xff0c;笔记本怎么开启tpm功能呢&#xff1f;下面小编就给大家详细介绍一下笔记本开启tpm功能的方法。 如何确认你笔记本…

ModuleNotFoundError: No module named ‘_ssl‘ centos7中的Python报错

报错 ModuleNotFoundError: No module named ‘_ssl’ 解决步骤&#xff1a; 1.下载openssl wget https://www.openssl.org/source/openssl-3.0.7.tar.gz tar -zxvf openssl-3.0.7.tar.gz cd openssl-3.0.72.编译安装 ./config --prefix/usr/local/openssl make make install3…

迁移学习相关基础

迁移学习 目标 将某个领域或任务上学习到的知识或模式应用到不同但相关的领域或问题中。 主要思想 从相关领域中迁移标注数据或者知识结构、完成或改进目标领域或任务的学习效果。 概述 Target data&#xff1a;和你的任务有直接关系的数据&#xff0c;但数据量少&#xff…

ReactPress系列—Next.js 的动态路由使用介绍

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议&#xff0c;感谢Star。 Next.js 的动态路由使用介绍 Next.js 是一个流行的 React 框架&#xff0c;支持服务端渲染、静态站点生成和动态路由等功能&#xff0c;极大地简化…

一文熟悉新版llama.cpp使用并本地部署LLAMA

0. 简介 最近是快到双十一了再给大家上点干货。去年我们写了一个大模型的系列&#xff0c;经过一年&#xff0c;大模型的发展已经日新月异。这一次我们来看一下使用llama.cpp这个项目&#xff0c;其主要解决的是推理过程中的性能问题。主要有两点优化&#xff1a; llama.cpp …

yolov8涨点系列之轻量化主干网络替换

文章目录 YOLOv8 替换成efficientvit轻量级主干网络的好处计算效率提升模型部署更便捷方便模型移植 模型可扩展性增强便于集成其他模块支持模型压缩技术 主干网络替换1.创建yolov8_efficeintVit.py2.修改task.py(1)引入创建的efficientViT文件(2)修改_predict_once函数(3)修改p…

python代码打包exe文件(可执行文件)

一、exe打包 1、构建虚拟环境 conda create -n env_name python3.8 #env_name,python根据自己需求修改2、保存和安装项目所需的所有库 pip freeze > requirements.txt3、虚拟环境安装项目包、库 pip install -r requirements.txt4、安装pyinstaller pip install pyinst…

scala学习记录,Set,Map

set&#xff1a;集合&#xff0c;表示没有重复元素的集合&#xff0c;特点&#xff1a;唯一 语法格式&#xff1a;val 变量名 Set [类型]&#xff08;元素1&#xff0c;元素2...&#xff09; 可变不可变 可变&#xff08;mutable&#xff09;可对元素进行添加&#xff0c;删…

ai外呼机器人的作用有哪些?

ai外呼机器人具有极高的工作效率。日拨打成千上万通不是问题&#xff0c;同时&#xff0c;机器人还可以快速筛选潜在客户&#xff0c;将更多精力集中在有价值的客户身上&#xff0c;进一步提升营销效果。183-3601-7550 ai外呼机器人的作用&#xff1a; 1、搭建系统&#xff0c…

Matlab实现鲸鱼优化算法优化随机森林算法模型 (WOA-RF)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 鲸鱼优化算法&#xff08;Whale Optimization Algorithm, WOA&#xff09;是受座头鲸捕食行为启发而提出的一种新型元启发式优化算法。该算法通过模拟座头鲸围绕猎物的螺旋游动和缩小包围圈的方式&#xff0c;在…

Linux基础4-进程5(程序地址空间详解)

上篇文章:Linux基础4-进程4&#xff08;环境变量&#xff0c;命令行参数详解&#xff09;-CSDN博客 本章重点&#xff1a; 1 重新理解c/c地址空间 2 虚拟地址空间 一. c/c地址空间 地址空间布局图: 运行下列代码&#xff0c;进行观察 #include <stdio.h> #include <…

本地连接IP地址的自主设置指南‌

在数字化时代&#xff0c;网络连接已成为我们日常生活和工作中不可或缺的一部分。无论是家庭网络还是企业网络&#xff0c;正确配置IP地址是确保网络畅通无阻的基础。IP地址&#xff0c;即互联网协议地址&#xff0c;是网络中每个设备的唯一标识。掌握如何自主设置本地连接的IP…

对 fn.apply(this, arguments) 的使用还在疑惑?快进来看看它的设计含义及常见使用场景吧~

&#x1f64c; 如文章有误&#xff0c;恳请评论区指正&#xff0c;谢谢&#xff01; ❤ 写作不易&#xff0c;「点赞」「收藏」「转发」 谢谢支持&#xff01; 背景 近期在研究高阶函数封装的过程中&#xff0c;看到 fn.apply(this, arguments) 的出镜率非常高&#xff0c;而如…

【ReactPress】React + antd + NestJS + NextJS + MySQL 的简洁兼时尚的博客网站

ReactPress 是使用React开发的开源发布平台&#xff0c;用户可以在支持React和MySQL数据库的服务器上架设属于自己的博客、网站。也可以把 ReactPress 当作一个内容管理系统&#xff08;CMS&#xff09;来使用。 前言 此项目是用于构建博客网站的&#xff0c;包含前台展示、管理…

Pycharm远程调试deepspeed!可用!

本人写代码的习惯就是一定是要从别人优秀的代码中调试学习的&#xff0c;直接运行看的话&#xff0c;可能知道了大概的逻辑但是缺无法知道细节的话&#xff08;参数的含义或者某某数据格式类型&#xff09;&#xff0c;可能对整体代码逻辑的把控不是狠好&#xff0c;所以还是从…

Redis 中 Bitmap 原理和应用

Bitmap Redis中的Bitmap&#xff08;位图&#xff09;是一种较为特殊数据类型&#xff0c;它以最小单位bit来存储数据&#xff0c;我们知道一个字节由 8个 bit 组成&#xff0c;和传统数据结构用字节存储相比&#xff0c;这使得它在处理大量二值状态&#xff08;true、false 或…