注册 登录
Python基础教程

第一章: 环境搭建,安装Python

第二章: 挑选一款趁手的IDE

第三章: 计算机基础知识

第四章: 命令行基础知识

第五章: 从全局把握Python

第六章: Python语言基础

第七章: Python流程控制

第八章: Python数据类型与运算

第九章: Python字符串类型

第十章: Python列表类型

第十一章: Python元组类型

第十二章: Python字典类型

第十三章: Python集合类型

第十四章: Python函数处理

第十五章: Python文件处理

第十六章: Python面向对象

第十七章: Python异常处理

第十八章: Python模块处理

第十九章: Python高级编程

第二十章: Python项目实战

首页 > Python基础教程 > 第十五章: Python文件处理 > 15.2节: 对文件进行读写操作

15.2节: 对文件进行读写操作

薯条老师 2020-05-23 08:33:12 251224 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

15.2.1 Python中的open函数

在Python中可以通过内置的open函数来对文件进行读写操作。同学们可以在交互模式中输入help(open)来查看open函数的定义:
>>> help(open)
Help on built-in function open in module io:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
   Open file and return a stream.  Raise OSError upon failure.
   file is either a text or byte string giving the name (and the path
   if the file isn't in the current working directory) of the file to
   be opened or an integer file descriptor of the file to be

从help(open)的输出可知,执行open函数时会打开一个文件,并返回一个stream。这里的stream是一个文件流对象。
同学们可以将文件理解为一种数据容器,而“流”,从其字面意思来进行理解:流即流动,可以想象下江河湖海中滔滔不息的水流。“流”赋予文件以动态的概念,数据存储在文件中,因为其流动的特性,我们可以对文件进行读写操作。

open函数的参数很多,初学者只需掌握参数列表的前五个形参:
file, mode, buffering, encoding,errors

file 对应的是文件的路径名,mode 对应的是文件的打开模式,buffering对应的是文件缓冲,encoding对应的是文件数据流的编码, errors表示的是对文件的读写过程中出现了编码问题时,该以什么样的方式进行处理。在通过open函数对文件进行读写操作前,我们需要先掌握文件的打开模式。

15.2.2 文件的打开模式

文件的打开模式如下表所示:

image.png

"r","w","a"模式可以与"b","t"模式进行组合,如"rb"表示以读取的方式读取二进制文件,"wb"模式表示写入文件的是二进制数据,薯条老师不再一一举例,同学们可以自行类推。

使用+符号时,使用的是读写混合模式。

读写混合模式:"r+","w+","a+"
(1) r+模式
"r+"表示"r"模式与"a"模式的混合,使用"r+"模式打开文件时,文件必须已存在,每次执行写操作的时候都是往文件尾部进行写入。
(2) w+模式
"w+"是"w"模式与"r"模式的混合,同"w"模式,如果文件已存在会清空文件内容,文件不存在时会创建文件。
(3) a+模式
"a+"是追加模式与读模式的混合,如果文件已存在会立即定位到文件尾部,文件不存在时会创建文件。

现在使用open方法来对文件进行读写,学习是一个渐进的过程,在本节内容中,主要介绍的是对文件进行基础的读写操作,在下节内容中,会讲解与文件读写操作相关的高级概念。

15.2.3 对文件进行写操作

通过文件流对象的write方法来对文件进行写操作。对文件进行写操作,使用的是w模式。

(1) file_stream.write(text)
形参text表示写入文件的内容,text必须是一个字符串类型。返回值为写入的字符数。可以在文件中写入多行,在数据后面加换行符'\n'表示一行。
代码实例:

# __desc__ = 执行文件流对象的write方法对文件进行写操作
 
# 先执行open方法获取一个文件流对象,使用w模式来进行写操作
file_stream = open("happy.txt", "w")
 
"""
(1)文件名为happy.txt,如果文件不存在会创建一个新的文件
(2)以w模式打开文件,会对文件的内容进行截断,从文件头开始写入数据 
"""
 
# 执行文件流对象的write方法来写入数据
# 返回值为写入的字符数
characters = file_stream.write("I am so happy")
 
# 对文件进行写操作以后,再执行文件流对象的close方法
file_stream.close()
 
"""
执行完close方法以后,用记事本打开该文件,可以看到以下内容:
I am so happy
"""
在数据中添加换行符"\n"时,可以在文件中写入多行内容:

# __desc__ = 执行write方法写入多行数据
 
# 先执行open方法获取一个文件流对象
file_stream = open("happy.txt", "w")
 
 
# 在数据中添加\n来表示一行的结束
characters = file_stream.write("I am so happy\nare u happy?\n")
 
# 对文件进行写操作以后,执行文件流对象的close方法
file_stream.close()
 
"""
执行完close方法以后,用记事本打开该文件,可以看到以下两行内容:
I am so happy
are u happy?
"""
(2) file_stream.writelines(lines)
这里的lines既可以是字符串类型,也可以是序列类型,如果是序列类型,元素必须是字符串。在writelines方法中,同样得手动地在字符串后面加上换行符,以表示一行。writelines方法没有返回值。

代码实例:

# __desc__ = 执行writelines方法来写入多行
file_stream = open("happy.txt", "w")
 
# 同write方法,字符后面得加上换行符\n,以表示写入一行
file_stream.writelines("happy\nso happy\n")
 
# 也可以传递序列对象来进行多行写入
file_stream.writelines(["happy\n", "are u happy?\n"])
file_stream.writelines(("glad\n", "so glad\n"))
file_stream.close()
 
 
"""
执行完close方法以后,用记事本打开该文件,可以看到以下6行内容:
happy
so happy
happy
are u happy?
glad
so glad
"""

15.2.4 对文件进行读操作

对文件进行写操作以后,可以再通过read方法来读取文件中的内容。对文件进行读操作时使用的r模式。

(1) file_stream.read(count)
这里的count表示读取文件中的多少个字符,可以不传递,不传值时,Python会尽可能地读取文件中的所有数据。

代码实例:

# __desc__ = 执行文件流对象read方法来读取文件内容
 
# 先通过open方法来获取一个文件流对象,使用r模式进行读操作
file_stream = open("happy.txt", "r")
 
# 执行文件流对象的read方法来读取文件中的所有内容
text = file_stream.read()
print(text)
 
"""
程序的输出为:
happy
so happy
happy
are u happy?
glad
so glad
"""
(2) file_stream.readlines()
readlines方法用来读取文件中的所有行,返回值为一个列表类型。
代码实例:

# __desc__ = 执行readlines方法来读取所有行
 
file_stream = open("happy.txt", "r")
 
# 执行readlines来读取所有行
lines = file_stream.readlines()
 
# 使用for循环输出每一行
for line in lines:
    print(line)
 
"""
程序的输出为:
happy
so happy
happy
are u happy?
glad
so glad
"""
在执行open方法获取文件流对象以后,可以直接使用for循环来对文件流对象进行逐行读取。
代码实例:

# __desc__ = 执行readlines方法来读取所有行
 
file_stream = open("happy.txt", "r")
 
for line in file_stream:
    print(line)
 
"""
程序的输出为:
happy
so happy
happy
are u happy?
glad
so glad
"""
直接对文件流对象进行遍历与在readlines的输出中进行遍历的效果是一样的,区别在于前者的for循环是将文件内容逐行读取到内存中,而readlines方法是一次性将所有内容读取到内存中,内存消耗很大。

15.2.5 知识要点

(1) 在Python中可以通过内置的open函数来对文件进行读写操作,执行open函数时会返回一个文件流对象。
(2) 执行open方法获取文件流对象以后,可以直接使用for循环来对文件流对象进行逐行读取。for循环是将文件内容逐行读取到内存中,而readlines方法是一次性将所有内容读取到内存中,内存消耗很大。

15.2.6 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:


欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录