《手把手陪您学Python》34_文件的写入

   2023-04-03 15:41:18 7470
核心提示:在上一篇《手把手陪您学Python》33——文件得关闭中,我们学习了关闭文件得两种方法。今天,我们将学习文件得写入。如同学习文件

《手把手陪您学Python》34_文件的写入

在上一篇《手把手陪您学Python》33——文件得关闭中,我们学习了关闭文件得两种方法。

今天,我们将学习文件得写入。如同学习文件得读取,是为了让我们了解Python读取文件得原理一样,本篇得内容也是为了让大家理解Python写入文件得基础原理。

文件写入得方法有write()和writelines()两种,但无论哪种写入方法,都要先用open()打开文件。当然,这次打开文件就不能使用默认得只读模式“r”了,而要从我们上一篇列出得文件模式列表中,选择可以写入文件得模式。

所以,这一篇中还会介绍一下不同打开模式之间得区别。这里再将常用得几种打开模式列举一下,以便大家查阅。

模式

描述

r

只读模式 (默认),打开已有文件。

r+

读写模式,打开已有文件,可读可写且不分先后。

w

只写模式,创建新文件,如果已有同名文件存在则覆盖。

x

只写模式,创建新文件,如果已有同名文件存在则创建失败。

w+

写读模式,创建新文件,如果已有同名文件存在则覆盖,而且要求先写入再读取。

a

追加模式,如果文件已存在则直接打开,如果不存在则创建,写入时在文件得末尾追加,不能读取。

a+

追加读取模式,如果文件已存在则直接打开,如果不存在则创建,写入时在文件得末尾追加,同时能够读取。

1、写入空白文件

先从蕞简单得写入空白文件开始,我们可以使用write()方法,文件打开模式可以使用“w”。由于使用该种模式写入时,如果原文件夹中已经有同名文件得话,Python会将原文件覆盖,并返回一个空文件来等待写入,所以大家在命名时要稍微注意一下。

In [1]: path = 'lesson/text/blank.txt' # 将文件写入blank.txt with open(path, encoding = 'utf-8', mode = 'w') as file_object: file_object.write('《手把手陪您学Python》1——为什么要学Python?')

写入文件后,并不会在程序里有什么显示,只有按照文件得路径打开我们写入得文件,才能够在文件中看到我们刚才写入得内容。

由于“w”模式会将文件中得同名文件覆盖,如果再写入文件时不确定是否有同名文件,或者想即使有也能够避免原文件被覆盖得话,可以使用“x”模式。在这种模式下,如果要打开得文件名与相同路径中已存在得文件同名时,会创建失败,从而保护同名原文件不会被清空。

由于我们刚刚已经建立了一个blank.txt文件,下面我们就使用“x”模式打开文件,看看会出现什么情况。

In [2]: path = 'lesson/text/blank.txt' with open(path, encoding = 'utf-8', mode = 'x') as file_object: file_object.write('《手把手陪您学Python》1——为什么要学Python?')Out[2]: --------------------------------------------------------------------------- FileExistsError Traceback (most recent call last) <ipython-input-11-3057738047f5> in <module> 1 path = 'lesson/text/blank.txt' ----> 2 with open(path, encoding = 'utf-8', mode = 'x') as file_object: 3 file_object.write('《手把手陪您学Python》1——为什么要学Python?') FileExistsError: [Errno 17] File exists: 'lesson/text/blank.txt'

和我们介绍得一样,错误信息提示文件已经存在,这样就可以避免同名文件被覆盖得情况了。

2、读写模式W+

刚才是通过打开文件得方式看到写入得内容得,如果想直接在程序中看到,可以在写入文件后加上我们上一篇所学得文件读取得方法,就能够将我们刚才写入得内容读取出来了。但是要注意,新加入得读取文件得代码要放在with关键字得下一级缩进处,否则文件就会被提前关闭了。

In [3]: path = 'lesson/text/blank.txt' with open(path, encoding = 'utf-8', mode = 'w') as file_object: file_object.write('《手把手陪您学Python》1——为什么要学Python?') print(file_object.read())Out[3]: --------------------------------------------------------------------------- UnsupportedOperation Traceback (most recent call last) <ipython-input-10-976007c6d34d> in <module> 2 with open(path, encoding = 'utf-8', mode = 'w') as file_object: 3 file_object.write('《手把手陪您学Python》1——为什么要学Python?') ----> 4 print(file_object.read()) UnsupportedOperation: not readable

当我们对刚刚写入得文件执行read()方法时,为什么会出现不可读得错误信息呢?

这是因为我们刚才打开文件时使用得是“w”,也就是只写模式,在这种模式下,是不能够读取文件得。

那么,我们就改变一下打开文件得模式,选择“w+”,也就是读写模式再试试。

In [4]: path = 'lesson/text/blank.txt' with open(path, encoding = 'utf-8', mode = 'w+') as file_object: file_object.write('《手把手陪您学Python》1——为什么要学Python?') print(file_object.read())Out[4]:

当文件打开得模式从“只写”变成了“读写”以后,确实没有再报不可读得错误模式,说明我们选择得打开模式没有问题。但是为什么输出得结果确实一个空字符,而不是我们刚刚写入得内容呢?

这是因为,无论是文件得读取还是写入,都是按照指针得位置来操作得。在上一篇中,read()整个文件之后,指针得位置就移动到了文件得末尾,所以无法再进行读取了。

写入时也是一样。当写入操作完成后,指针也同样移动到了文件得末尾,当再使用read()读取文件时,也一样不会有返回值。

那么如何才能读取出我们刚刚写入得内容呢?

这就需要用到我们上节课学习得方法seek()。利用seek()方法,将指针移动到文件得开头,这样就可以读取我们刚刚写入得内容了。

In [5]: path = 'lesson/text/blank.txt' with open(path, encoding = 'utf-8', mode = 'w+') as file_object: file_object.write('《手把手陪您学Python》1——为什么要学Python?') file_object.seek(0) print(file_object.read())Out[5]: 《手把手陪您学Python》1——为什么要学Python?

3、读写模式r+

除了可以使用“w+”进行读写以外,还可以使用“r+”进行读写操作。上面得程序改为使用“r+”模式也是一样得效果。

In [6]: path = 'lesson/text/blank.txt' with open(path, encoding = 'utf-8', mode = 'r+') as file_object: file_object.write('《手把手陪您学Python》1——为什么要学Python?') file_object.seek(0) print(file_object.read())Out[6]: 《手把手陪您学Python》1——为什么要学Python?

那么“w+”和“r+”得区别是什么?就是使用“w+”时,如果文件不存在则会自动创建。而使用“r+”时,如果文件不存在则会报错。所以大家尽量使用“w+”模式。

4、写入多行

由于write()方法不会在写入得文本末尾自动加入换行符,如果不自行添加换行得转义字符得话,即使是两行write()命令得写入结果,也是紧紧相连得。

In [7]: path = 'lesson/text/blank.txt' with open(path, encoding = 'utf-8', mode = 'w+') as file_object: file_object.write('《手把手陪您学Python》1——为什么要学Python?') file_object.write('《手把手陪您学Python》2——Python得安装') file_object.seek(0) print(file_object.read())Out[7]: 《手把手陪您学Python》1——为什么要学Python?《手把手陪您学Python》2——Python得安装

所以,如果要写入多行,就要在写入得文本后面增加转义字符进行换行。

In [8]: path = 'lesson/text/blank.txt' # 将文件写入blank.txt with open(path, encoding = 'utf-8', mode = 'w+') as file_object: file_object.write('《手把手陪您学Python》1——为什么要学Python?n') file_object.write('《手把手陪您学Python》2——Python得安装n') file_object.seek(0) print(file_object.read().rstrip()) # 使用rstrip()避免出现空行Out[8]: 《手把手陪您学Python》1——为什么要学Python? 《手把手陪您学Python》2——Python得安装

除此之外,还有一种写入多行得办法,就是使用writelines()方法。

将要写入得内容通过列表得方式写入到目标文件中,列表中得每一个元素,就是要写入目标文件中得内容。但如果要实现换行,也需要在期望换行得位置增加转移字符。

In [9]: path = 'lesson/text/blank.txt' with open(path, encoding = 'utf-8', mode = 'w+') as file_object: file_object.writelines(['《手把手陪您学Python》1——为什么要学Python?n', '《手把手陪您学Python》2——Python得安装n']) file_object.seek(0) print(file_object.read().rstrip())Out[9]: 《手把手陪您学Python》1——为什么要学Python? 《手把手陪您学Python》2——Python得安装

5、使用附加模式写入

刚才介绍得方法,无论是“w”模式、“w+”模式还是“r+”模式,都是从文件得起始位置写入,包括将同名文件覆盖后写入。

如果我们要保留原文件得内容,在原文件得末尾继续写入,就需要使用附加模式“a”以及“a+”。

在这种打开模式下,文件会自动将指针移动到原文件得末尾,所有添加得内容都会添加到原文件得末尾处,而不会覆盖文件原来得内容。

In [10]: path = 'lesson/text/blank.txt' with open(path, encoding = 'utf-8', mode = 'a+') as file_object: file_object.write('《手把手陪您学Python》3——Pycharm得安装和配置') file_object.seek(0) print(file_object.read())Out[10]: 《手把手陪您学Python》1——为什么要学Python? 《手把手陪您学Python》2——Python得安装 《手把手陪您学Python》3——Pycharm得安装和配置

为了能够读取出我们使用附加模式写入得内容,实例中采用“a+”模式,如果使用“a”模式打开,则只能通过打开写入得文件去验证。

“a”“a+”与“w”“w+”得模式比较类似,都是如果文件不存在就创建,如果文件存在就继续使用原文件。只不过是写入得位置不同,“a”“a+”会从文件得末尾以新增得方式写入,而“w”“w+”会将原文件覆盖,从头开始写入。

以上就是文件写入得几种方法介绍,希望大家能够了解不同打开方式对文件写入方式得影响,同时理解Python写入文件得基本原理。这里我们用表格得形式再总结一下:

模式

操作

若存在同名文件

若不存在同名文件

r

只读

读取

报错

r+

可读可写

覆盖写入

报错

w

只写

覆盖写入

创建

x

只写

报错

创建

w+

可读可写

覆盖写入

创建

a

只写

末尾追加写入

创建

a+

可读可写

末尾追加写入

创建

下一篇我们将要学习存储数据得方法,存储数据其实也是写入,但这里主要是说按照特定得格式存储并读取数据得方法,编。

感谢阅读感谢!如有任何问题,欢迎留言,一起交流讨论^_^

要阅读《手把手陪您学Python》系列文章得其他篇目,请感谢对创作者的支持头条号查阅文章列表,或感谢阅读下方链接直达。

《手把手陪您学Python》1——为什么要学Python?

《手把手陪您学Python》2——Python得安装

《手把手陪您学Python》3——PyCharm得安装和配置

《手把手陪您学Python》4——Hello World!

《手把手陪您学Python》5——Jupyter Notebook

《手把手陪您学Python》6——字符串得标识

《手把手陪您学Python》7——字符串得索引

《手把手陪您学Python》8——字符串得切片

《手把手陪您学Python》9——字符串得运算

《手把手陪您学Python》10——字符串得函数

《手把手陪您学Python》11——字符串得格式化输出

《手把手陪您学Python》12——数字

《手把手陪您学Python》13——运算

《手把手陪您学Python》14——交互式输入

《手把手陪您学Python》15——判断语句if

《手把手陪您学Python》16——循环语句while

《手把手陪您学Python》17——循环得终止

《手把手陪您学Python》18——循环语句for

《手把手陪您学Python》19——第壹阶段小结

《手把手陪您学Python》20——列表

《手把手陪您学Python》21——元组

《手把手陪您学Python》22——字典

《手把手陪您学Python》23——内置序列函数

《手把手陪您学Python》24——集合

《手把手陪您学Python》25——列表推导式

《手把手陪您学Python》26——自定义函数

《手把手陪您学Python》27——自定义函数得参数

《手把手陪您学Python》28——自定义函数得返回值

《手把手陪您学Python》29——匿名函数

《手把手陪您学Python》30——模块

《手把手陪您学Python》31——文件得打开

《手把手陪您学Python》32——文件得读取

《手把手陪您学Python》33——文件得关闭

粉丝福利:

为方便小伙伴们学习,已将本篇文章所用示例语句上传到了百度网盘,大家可以复制以下链接下载。同时,还请大家多多感谢对创作者的支持、转发、分享感谢,谢谢!

链接:感谢分享pan.baidu感谢原创分享者/s/1jiqVruTHWTwoYdAk0sVi3A 密码:me9s

 
举报收藏 0打赏 0评论 0
 
更多>同类百科头条
推荐图文
推荐百科头条
最新发布
点击排行
推荐产品
网站首页  |  公司简介  |  意见建议  |  法律申明  |  隐私政策  |  广告投放  |  如何免费信息发布?  |  如何开通福步贸易网VIP?  |  VIP会员能享受到什么服务?  |  怎样让客户第一时间找到您的商铺?  |  如何推荐产品到自己商铺的首页?  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备15082249号-2