前言:在上一篇博文中,我们主讲了文件的操作模式,主讲了写入数据的形式,但是没有讲到如何对文件的数据进行读取,那么本博文主针对读取数据的两种方法来进行细谈。(上一篇博文友情链接python文件操作)
文章目录:
- 一:Read()方法:
-
- 1.无参数读取:
- 2.有参数进行读取:
- 二.Readline()方法:
- 三.Readlines()方法:
- 四.建议:
😃在此之前,我们首先新建一个文件,写入一定的数据,以方便我们读取有数据😃
with open("测试","a",encoding="utf-8") as f:
for i in range(10):
f.write(f"您好世界:{i}\n")
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNyZuBnL3cTO3MjN1cTMyEDOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
一: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()方法
,它每次将数据
存储在列表中
,每行都是一个元素,相对读取大文件而言比较占用内存。