前言:在上一篇博文中,我们主讲了文件的操作模式,主讲了写入数据的形式,但是没有讲到如何对文件的数据进行读取,那么本博文主针对读取数据的两种方法来进行细谈。(上一篇博文友情链接python文件操作)
文章目录:
- 一:Read()方法:
- 1.无参数读取:
- 2.有参数进行读取:
- 二.Readline()方法:
- 三.Readlines()方法:
- 四.建议:
😃在此之前,我们首先新建一个文件,写入一定的数据,以方便我们读取有数据😃
with open("测试","a",encoding="utf-8") as f:for i in range(10):f.write(f"您好世界:{i}\n")
一:Read()方法:
read()
是逐字符地读取,read()
可以指定参数,设定需要读取多少字符,无论一个英文字母还是一个汉字都是一个字符。
read(self,n)
:self
:这个参数指的也就是这个要的文件本身,n
:为读取指定个数
的数据
格式:
文件名.read()
1.无参数读取:
with open("测试","r",encoding="utf-8") as f:# for i in range(10):# f.write(f"您好世界:{i}\n")print(f.read())
用于从文件读取指定的字节数,如果未给定指定读取的字节数(n)
或为负
则读取所有的,也就是读取数据是一次性全部进行读取
2.有参数进行读取:
给定指定读取得到字节数
,则会读取到指定的个数,
如果给定的字节数超出
原有文本的字节数,那么不会报错
会读取所有
的内容:
with open("测试","r",encoding="utf-8") as f:# for i in range(10):# f.write(f"您好世界:{i}\n")print(f.read(2))print(f.read(67))
如果第一次读取一定的字符,然后第二次再进行读取,那么光标会定位在第一次读取后的末尾
,就像上图所示效果,会在末尾继续读取
,不会重新重头开始读取
二.Readline()方法:
readline()
:用于从文件读取整行,包括"\n"
字符。如果指定了一个非负数
的参数,则返回指定大小
的字节数,包括"\n"
字符。
with open("测试","r",encoding="utf-8") as f:# for i in range(10):# f.write(f"您好世界:{i}\n")print(f.readline())
由上可以看到,后面有很大的空闲,这是由于readline()
读取到了文本
的"\n"
加上print本身自带的换行
,所以也就是说现在有两个换行
,所以会有这么大的空:
三.Readlines()方法:
readlines()
:用于读取所有行(直到结束符 EOF
)并返回列表
,如果碰到结束符 EOF
则返回空字符串
,至于什么是EOF
,详情请看EOF(链接取自百度百科)
readlines()
和readline()
相似,都取到了"\n"
,只不过readlines()
将其装入到列表中并进行返回
,但是readline()
只是取到了,但是不会显示"\n",
那是什么意思呢?一起来看看吧.
with open("测试","r",encoding="utf-8") as f:# for i in range(10):# f.write(f"您好世界:{i}\n")print(f.readlines())print(type(f.readlines()))
如上图所示,取到的是一个列表
,并且后面都带有"\n"
,这是因为在写数据时候已经换行了,它就会把换行符显示
出来,如果不想让他们显示的话,我们可以配合for ... in ...
来进行显示,但是我们又会发现一个问题,见图:
with open("测试","r",encoding="utf-8") as f:# for i in range(10):# f.write(f"您好世界:{i}\n")# print(f.readlines())for i in f.readlines():print(i)print(type(f.readlines()))
进行显示后后面会有那么大的空隙,这是因为换行符起到作用了,我们可以使用字符串中的strip()
方法来进行修改,如下:
with open("测试","r",encoding="utf-8") as f:# for i in range(10):# f.write(f"您好世界:{i}\n")# print(f.readlines())for i in f.readlines():ret=i.strip()print(ret)print(type(f.readlines()))
四.建议:
个人推荐一般使用时尽量使用readline()方法
,因为read()
是一次性读取
所有文件数据,对于小文件来说还行,但是当文件比较大的时候就不可以了,就会很慢,也会对内存造成不必要的损耗,readline()方法
,读取时占用内存小,比较适合大文件
,该方法返回一个字符串对象
,所以推荐大家使用readline()方法
,相对于readlines()方法
,它每次将数据存储在列表中
,每行都是一个元素,相对读取大文件而言比较占用内存。