69. open函数—打开文件并返回文件对象

news2024/9/20 12:38:29

69. open函数—打开文件并返回文件对象

文章目录

  • 69. open函数—打开文件并返回文件对象
    • 1. open() 函数的作用
    • 2. open函数语法参考
    • 3. open()函数参数说明
      • 1. file参数
      • 2. encoding 参数
      • 3. errors参数
      • 4. mode参数
    • 4. mode参数详解
      • 1. 准备工作
      • 2. w 写入模式
      • 3. a 追加模式
      • 4. r 只读模式
    • 5. 总结
      • 1. 代码总结
      • 2. 路径的转义
      • 3. mode模式
      • 4. 图片总结

1. open() 函数的作用

open[ˈəʊpən]:打开。

open的中文释义是打开。

open( )函数的作用是打开文件。

【返回值】

open函数返回的是一个文件对象

2. open函数语法参考

open 函数语法如下:

open(file, mode='r', encoding='None', errors='None')

file[faɪl]:文件。

mode[məʊd]:模式。

encoding[ɪnˈkəʊdɪŋ]:编码。

errors[ˈerəz]:错误。

none [nʌn]:没有。

open( )函数中的参数还有很多,这里介绍4个常用参数。

3. open()函数参数说明

1. file参数

file[faɪl]:文件。

file 是必需参数。

参数file 表示要打开文件的路径

路径可以是绝对路径,也可以是相对路径。

绝对路径是指文件在硬盘上真正存在的路径。

相对路径是针对当前文件夹这一参考对象,来描述文件路径的形式。

参考《68.Python的相对路径》。

2. encoding 参数

encoding[ɪnˈkəʊdɪŋ]:编码。

参数 encoding 表示文件的编码方式,文件编码方式一般为 ‘utf-8’。

为了避免程序报错或者读取到的内容出现乱码,需要把 encoding 设置为 ‘utf-8’,即写为 encoding=‘utf-8’。

编码的详细知识,以后在做详细介绍。

3. errors参数

errors 参数表示读写文件时碰到错误的报错级别。

strict [strɪkt]:严格的。

strict:严格级别。字符编码有报错即抛出异常。也是默认级别,errors 参数值传入None 即按此级别抛出异常。

ignore [ɪɡˈnɔː]:忽视、忽略。

ignore:忽略级别。字符编号有错误,忽略掉。

推荐errors参数的取值为’ignore’,表示在遇到编码错误时忽略该错误,程序会继续执行,不会退出。

replace [rɪˈpleɪs]:替代。

replace:替换级别,字符编码有错的,替换成?。

4. mode参数

mode[məʊd]:模式。

mode 是可选参数。

参数mode决定了打开文件的模式。

r:以只读模式打开文件。

t:以文本文件模式打开文件。

b:以二进制文件文件模式打开文件。

w:以只写模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则覆盖文件的内容。

x:以独占创建模式打开文件,如果文件不存在,则创建并以写入模式打开;如果文件已存在,则引发FileExistsError异常。

a:以追加模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则在文件末尾追加。

+:以更新(读写)模式打开文件,必须与r、w或a组合使用,才能设置文件为读写模式。

这些字符可以进行组合,以表示不同类型的文件的打开模式,如下表所示。

在这里插入图片描述

【备注】上图来源于《看漫画学Python》。

【温馨提示】

参数 mode 可以不写,不写时mode默认值为r,即只读模式。

4. mode参数详解

1. 准备工作

  1. 我在D盘里新建一个文件夹命名为69

  2. 我的69文件夹中有1个名为img的文件夹,有1个名为69的ipynb文件。(img文件夹是我存储图片用的,大家可以不用理会)

vscode编辑器资源管理器中的目录如下所示:

在这里插入图片描述

硬盘中的目录如下所示:

在这里插入图片描述

  1. 我的代码在名为69的ipynb文件中编写。

  2. 我用的vscode编辑器,编辑器打开的文件夹为69

【备注】

编辑器打开的文件夹不同,则相对路径不同。

2. w 写入模式

w:以只写模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则覆盖文件的内容。

【语法解析】

  1. 文件不存在,则创建文件。

  2. 文件存在,则覆盖文件的内容。

以绝对路径,w只写模式打开文件:

f = open ("D:\\69\成绩1.txt", "w", encoding="utf-8")

以相对路径,w只写模式打开文件:

f = open ("成绩2.txt", "w", encoding="utf-8")

【代码解析】

f 是变量名,接收open 函数返回的文件对象;

"D:\\69\成绩1.txt"是文件的绝对路径。

"成绩2.txt"是文件的相对路径。

w表示只写模式。

w 模式下,文件存在则打开文件,文件不存在则新建文件。

我们在准备工作时是没有新建过txt文件,因此成绩1.txt成绩2.txt文件此时不存在。

不存在则新建一个文件。

因此,运行代码后我们观察资源管理器目录或者69文件夹,我们发现多了成绩1.txt成绩2.txt2个文件。

在这里插入图片描述

这就是文件不存在则新建文件的意思。

【课堂练习】

修改路径参数,用绝对路径的方法在桌面新建一个名为测试.txt的文件。

不知道桌面的绝对路径的可以用【shift】方法随便查看一个桌面文件的绝对路径。

下面就是我查看的桌面某个文件的路径:

“C:\Users\xiaoyuzhou\Desktop\空.docx”

参照上面的代码修改路径参数,代码如下:

f = open ("C:\Users\xiaoyuzhou\Desktop\测试.txt", "w", encoding="utf-8" )

【终端输出】

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

运行上面的代码,程序报错。

程序报错,我们首先考虑路径参数转义字符问题。

将路径参数中的所有\都多加上一个反斜杠\,修改如下:

f = open ("C:\\Users\\xiaoyuzhou\\Desktop\\测试.txt", 
"w", 
encoding="utf-8" )

运行代码后,我们发现程序能够正常运行。

我们查看电脑桌面,发现电脑桌面多了一个名为测试.txt的文件。

但我们发现增加斜杆的方法实在太麻烦,那有没有其它简便的方法呢?

其实我们可以通过在路径参数前面加上一个字母r/R,这时候就不需要使用反斜杆进行转义了。

【路径参数前增加一个r】

f = open (r"C:\Users\xiaoyuzhou\Desktop\测试1.txt", 
"w", 
encoding="utf-8" )

【路径参数前增加一个R】

f = open (R"C:\Users\xiaoyuzhou\Desktop\测试2.txt", 
"w", 
encoding="utf-8" )

大家观察电脑桌面,我们就成功的新建了测试1.txt测试2.txt2个文件。

我们继续讲解w模式的如果文件存在,则覆盖文件的内容。

我们刚才新建了成绩1.txt成绩2.txt2个文件。

那如果文件存在,则w模式可以直接写入。

成绩1.txt中写入张三,90分

f = open ("成绩1.txt", "w", encoding="utf-8")
f.write("张三,90分")
f.close( )

上述代码的作用是将张三,90分写入到文件成绩1.txt中。

【代码解析】

f = open ("成绩1.txt", "w", encoding="utf-8")

f 是变量名,接收open函数返回的文件对象。

"成绩1.txt"是open函数的file参数,表示文件的相对路径;

"w"是open函数的mode参数,表示只写模式;

encoding表示字符编码格式为utf-8

f.write("张三,90分")

上述代码的作用是将张三,90分写入到文件对象中,即写入到成绩1.txt

【将内容写入文件的语法】

f.write(obj)

f 是文件对象,就是一个变量名,你可以自己命名。

文件对象后紧跟一个英文小圆点.

write是方法名。

obj为要写入的内容,这里要写入的内容是张三,90分

运行代码后,大家查看成绩1.txt文件,如下所示:

在这里插入图片描述

【关闭文件语法】

f.close( )

f 是变量名,接收open函数返回的文件对象。

文件对象后紧跟一个英文小圆点.

close是方法名。

【温馨提示】

大家在Python中操作文件时,注意读写完毕后都要进行关闭。这根我们日常生活中的操作是一样的,不关闭文件,我们是没办法对文件进行删除的。

上面代码我们完成了写入功能,下面我们讲解覆盖文件的内容的含义:

【覆盖文件的内容】

再执行下面的代码之前,大家先打开成绩1.txt,确定文件里的内容为张三,90分

下面的代码要实现的功能是将李四,60分写入文件成绩1.txt

f = open ("成绩1.txt", "w", encoding="utf-8")
f.write("李四,60分")
f.close()

运行上面的代码后,我们再观察成绩1.txt文件,如下所示:

在这里插入图片描述

之前的张三,90分内容被覆盖了,只保留了最后1次写入的内容,这就是覆盖文件内容的意思。

【知识回顾】

w:以只写模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则覆盖文件的内容。

那如果我不想删除文件本来就存在的内容,怎么办呢。

我们可以采用追加模式。

3. a 追加模式

a:以追加模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则在文件末尾追加。

a追加模式w只写模式的区别在于追加模式保留原有内容,只写模式覆盖原有内容。

  1. 将mode参数修改为a

  2. 写入内容为王五,77分

f = open ("成绩1.txt", "a", encoding="utf-8")
f.write("王五,77分")
f.close()

打开成绩1.txt,如下图所示:

在这里插入图片描述

打开成绩1.txt可以看到王五,77分已经写入到文件中,且原有的内容李四,60分依然存在,这就是追加模式。

但大家发现我们写入的内容和原本的内容之间没有符号作为间隔,不方便我们观看。那该如何修改呢?

我们采用转义字符的方法可以解决上述问题。

\n可以实现换行功能:

f = open ("成绩1.txt", "a", encoding="utf-8")
f.write("\n赵六,66分")
f.close()

输入后如下图所示:

在这里插入图片描述

【转义字符】

在这里插入图片描述

【备注】上图来源于《风变编程》。

4. r 只读模式

r:以只读模式打开文件。

只能打开已经存在的文件。

如果文件不存在,程序不会创建新的文件,会报错。

f = open ("成绩9.txt", "r", encoding="utf-8")

【终端输出】

FileNotFoundError: [Errno 2] No such file or directory: '成绩9.txt'

[Errno 2] No such file or directory: '成绩9.txt' :没有这样的文件或目录: '成绩9.txt ’

f = open ("成绩1.txt", "r", encoding="utf-8")
f.close()

运行上述的代码,成绩1.txt文件其实已被我们成功打开。

但Python中的打开和我们日常生活中的打开不是一个含义。

我们工作中的打开,肉眼是可以看到一个具体的文档的。

Python中的打开,其实就是得到一个文件对象,方便我们后续操作文件,这个文件对象我们肉眼是看不见的。

有时候我们并不需要对文件进行写的操作,我们只需要打开文件即只读模式,此时我们的第二个参数mode 就为r,注意,r也可以不写。

mode 参数就讲解到这里,剩下的模式将不再进行赘述。

5. 总结

1. 代码总结

# w只写模式
f = open ("花名册.doc", "w", encoding="utf-8")
f.write("王小溪")

# a追加模式
f = open ("花名册.doc", "a", encoding="utf-8")
f.write("\n李华华")

# r只读模式
f = open ("花名册.doc", "r", encoding="utf-8")

# 关闭文件
f.close()

2. 路径的转义

绝对路径参数前面加上一个字母r/R,这时候就不需要使用反斜杆进行转义了。

3. mode模式

w:以只写模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则覆盖文件的内容。

a:以追加模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则在文件末尾追加。

r:以只读模式打开文件。

4. 图片总结

在这里插入图片描述

【温馨提示】

如果初学者在本节的代码遇到报错,基本是file路径参数的错误,建议大家回看相对路径的相关知识,相对路径是非常重要的一个知识点,这个知识点不掌握,后面将寸步难行。

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

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

相关文章

RabbitMQ学习总结(10)—— RabbitMQ如何保证消息的可靠性

一、丢失场景 RabbitMQ丢失的以下3种情况: (1)生产者:生产者发送消息至MQ的数据丢失

布隆过滤器的使用

目录说明使用布隆过滤器使用测试Java 本地使用布隆过滤器Java集成Redis使用布隆过滤器说明 布隆过滤器是用来防止缓存穿透的,我们需要知道如何使用布隆过滤器。 使用 Google 的 Guava 库提供了使用布隆过滤器的 API 类(BloomFilter.class)&…

ubuntu 创建raid5教程

1、查看磁盘:parted -l 2、安装创建raid工具mdadm: sudo apt install mdadm 3、创建命令: sudo mdadm -Cv /dev/md0 -l5 -n3 /dev/sdb /dev/sdc /dev/sdd 说明: -Cv: 创建一个阵列并打印出详细信息 /dev/md0: 阵列名称 -l5: 指定阵列类型为 R…

Linux管道排序命令:sort、wc、uniq

sort 它可以根据不同的数据形式来排序,例如数字与文字的排序就不一样。此外,排序的字符与语系的编码有关,因此我们需要排序时,建议使用LANGC来让与系统统一,数据排序比较好一些 sort 【-fbMnrtuk】【file or stdin】 …

java: 错误: 不支持发行版本 5(快速解决办法)

目录 前言 一、出现报错 二、报错的原因 三、解决办法 四、解决成功 前言 在maven web项目上面要部署运行tomcat时候,会出现这个问题 一、出现报错 java: 错误: 不支持发行版本 5 二、报错的原因 (1)官方解释:这个错误…

解决1130-Host‘ ‘is not allowed to connect to this MySQL server,实现远程连接本地数据库

在使用Navicat远程连接本地数据库时,遇到了这样一个问题,我使用 本地主机的地址,连接本地的数据库,报错host ‘’ is not allowed to connect to this mysql server。上网上查了一下资料,原来自己安装在本地的mysql默认…

Netty 学习笔记——概念篇

Netty Home Netty GitHub Netty简介 Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。 也就是说,Netty 是一个…

Java——聊聊JUC中的ThreadLocal

文章目录: 1.什么是ThreadLocal? 1.1 api介绍 1.2 最简单的案例认识ThreadLocal 1.3 线程池结合ThreadLocal案例 2.Thread &ThreadLocal & ThreadLocalMap 3.ThreadLocal内存泄漏问题 3.1 四大引用之强引用 3.2 四大引用之软引用 3.3 四…

cs285学习笔记

文章目录lec1ML和RL之间的区别几种RL分类current challengeslec4markov chainmarkov decision processpartially observed markov decision processRLs goalQ & Alec1 ML和RL之间的区别 mlrliid data数据不iid,前面的数据会影响future input训练时有确定的gro…

搜索二叉树

文章目录二叉搜索树模拟实现InsertInsertR()EraseEraseR搜索树的价值实现代码二叉搜索树 在二叉树的基础之上, 左子树的值都比根节点小,右子树都更大。那么他的左右子树也分别叫做二叉搜索树。 查找一个节点,最多查找高度次(建立在这个树是比较均衡的).10亿里面找…

Shennina:一款带有人工智能的自动化主机渗透工具

关于Shennina Shennina是一款功能强大的自动化主机渗透/漏洞利用框架,该项目的主要目的是使用人工智能技术来实现安全扫描、漏洞扫描/分析和漏洞利用开发的完全自动化。Shennina整合了Metasploit和Nmap这两款强大的网络安全工具实现其部分功能,并执行渗…

微搭使用笔记(二)微搭低代码平台介绍及基础使用

概述 官网地址: 官网 官方文档: 官方文档 FAQ: FAQ 腾讯云微搭低代码是一个高性能的低代码开发平台,用户可通过拖拽式开发,可视化配置构建 PC Web、H5 和小程序应用。支持打通企业内部数据,轻松实现企业微信管理、工…

别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(4)

别具一格,独此一家,原创唯美浪漫情人节表白专辑 不一样的惊喜哦~!(html5,css3,svg)表白爱心代码(复制就可用)(4) 目录 款式四:时光的记忆款 1、拷贝完整源代码 2、更新时光盒所…

Springboot使用MDC进行日志追踪

Springboot使用MDC进行日志追踪前言一、为什么要跟踪日志二、MDC存储日志原理三、开始代码1、封装MDC工具类2、注册日志追踪拦截器四、配置logBack五、查看追踪效果六、要解决traceId传递问题1、在不同线程之间的传递2、远程调用时候的传递总结前言 MDC(Mapped Diag…

基于ChatGPT +Node.js的基本使用

一、简介 最近,围绕ChatGPT和OpenAI的话题是层出不穷,国内外的技术工作者都掀起了一股学习OpenAI的技术浪潮,甚至有很多的媒体预测OpenAI将会带来行业的革命,而国外一些大的企业也将OpenAI视为重要的竞争对手,比如Google和微软。 事实上,OpenAI 可以应用于任何涉及理解…

SpringBoot(3)之包结构

根据spring可知道,注解之所以可以使用,是因为通过包扫描器,扫描包,然后才能通过注解开发。 那么springboot需要扫描哪里呢? springboot的默认包扫描器,扫描的是自己所在的包和子包,例子如下 我…

生成式AI对业务流程有哪些影响?企业如何应用生成式AI?一文看懂

集成与融合类ChatGPT工具与技术,以生成式AI变革业务流程ChatGPT背后的生成式AI,聊聊生成式AI如何改变业务流程ChatGPT月活用户过亿,生成式AI对组织的业务流程有哪些影响?生成式AI对业务流程有哪些影响?企业如何应用生成式AI?一文看懂业务流…

Transformer

Transformer由4部分组成,分别是:输入模块、编码模块、解码模块、输出模块整体架构图:一、输入模块结构 (1)源文本嵌入层及其位置编码器(2)目标文本嵌入层及其位置编码器二、编码器模块结构由N个…

【计算器】四则运算的算法实现

先实现整数部分 加减乘比较简单, 可以参考: 高精度算法全套(加,减,乘,除,全网最详细). 除法我参考的是: 大数加减乘除运算总结 四则运算相关的OJ题目 四则远算 关于除法 基本上参考的是: 大数加减乘除…

数据结构:队列

队列 队列(Queue)是一个数据集合,仅允许在列表的一端进行插入,另一端进行删除。 进行插入的一端称为队尾(rear),插入动作称为进队或入队 进行删除的一端称为队头(front),删除动作称为出队 队列的性质:先进先出(First-in, First-o…