先看是什么,再看怎么用。着急的话,可以看最后的一节。
开始前,先介绍一个小技巧:内置函数 repr(英文名representation)。开发调试用的,返回一个对象的字符串表示形式,包含对象的类型。
(函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式。)
举例:
my_str = '你好\n'
print(my_str.__str__())
print(my_str.__repr__())
结果:
你好
'你好\n'
str 函数直接将‘\n’转义的结果打印了,看不到’\n’了,而 repr 函数的打印结果保留了字符串原始的样子,而且可以看出打印的是一个字符串类型。
接下来,我们也用 repr 这个函数来看看 read 函数的结果。为方便解释,我们的代码示例每次都读取整个文件。
文件内容:
read
read函数用于一次性读取整个文件的内容,并将其作为一个字符串返回。
如果不指定参数,则默认读取整个文件内容。
如果指定了参数size,则会读取指定大小的字符数。
读取完文件内容后,再次调用read函数将返回空字符串。
with open('running.log', 'r') as f:
content = f.read()
print(content)
print(content.__repr__())
运行结果:
一般的print打印可以看到文件完整内容,而 read的结果上实际上是一个字符串,包含有文件每行的换行符’\n’,第2行开头的空格也会保留下来。
简单来说,read 函数就是将文件从头到尾一字不落地读取到一个字符串中。
readlines
readlines函数用于逐行读取文件内容,并将每行内容作为一个元素存储在列表中返回。
返回的列表中的每个元素对应文件中的一行文本。
with open('running.log', 'r') as f:
content = f.readlines()
print(content.__repr__())
运行结果:
显然,readlines 的结果是一个列表,每个元素就是文件一行的内容,同样也保留了空格。
简单来说,readlines 读取的也是整个文件一字不落的内容,只是按行存放在了列表中。方便按行取用。
readline
readline函数用于逐行读取文件内容,并返回当前行的内容。
每次调用readline函数,都会读取文件中的下一行。
当文件内容读取结束后,再次调用readline函数将返回空字符串。
with open('running.log', 'r') as f:
print(f.readline().__repr__())
运行结果:
readline 一次调用只能读取一行,不能完整读取文件。
从名字就可以看出来,readline 就是 readlines 函数的子过程。
简单来说,就是读取文件的一行。
如果要完整读取,可以这样写:
with open('running.log', 'r') as f:
for line in f:
print(line.__repr__())
运行结果:
怎么选择?:
本质上来说,三者并没有区别,都能够完整读取文件内容,包括末尾的’\n’的等换行符。
差别在于返回类型和调用形式。
read 返回字符串类型,如果你需要用正则去查找一些东西,字符串是更好的选择。
readlines 返回列表类型,如果你需要读取完文件然后挑几行处理,或者逐行处理,就用它。(在 python 中是更常用的,无脑用。)
readline 返回的是字符串类型,如果你需要在读取文件的过程中就进行处理判断,不需要读完整个文件,用这个函数就比较合适。