关于python的readlines(),readline(),read()的介绍

1.read()

这个函数是把一个文档当成一个字符串(结尾有空字符串)返回。也就是一个文档存储在一个字符串对象中,如果文件很大,就很耗内存。

注:read()和原来的文档相比,输出的时候结尾多了一个'\n'(换行),其余没区别

如果想要输出和原文档一模一样,需要在结果加rstrip(),也就是去掉末尾空格,例如:

有一个文件pi_digits.txt,内容如下:

pi_digits.txt

3.14345345345
  23426534534
  45345123656

1.py如下

file_name = 'pi_digits.txt'
with open(file_name) as f:
    contents = f.read()
print(contents)
print(contents.rstrip())

运行1.py结果如下:

3.14345345345
  23426534534
  45345123656

3.14345345345
  23426534534
  45345123656

显然第一个末尾多一个空行,第二次和原文档一样。

2.readlines(),是把一个文档的每一行(包含行前的空格,行末加一个\n),作为列表的一个元素,存储在一个list中。每一个行作为list的一个元素。

注意:readlines()和原文档相比,每行之后都多出一个空行,因为原来每行末尾都加了'\n',要想和原文档输出一样,那么每个行末尾加上rstrip()即可消除右边空格,左边空格不变。

3.readline(),类似于readlines(),不过它每次只读取文档的一行。以后需要逐步循环(一般用whicl循环),最后遍历整个文件。

注意:输出情况同readlines()

4.直接使用open() 返回的对象,例如:

file_name = 'pi_digits.txt'
f1 = open(file_name)
#这里f1在原来的每行末尾都放置了一个'\n',print本身也会加一个'\n',所以每行输出后多两个'\n',
#两次换行的结果是行和行之间夹着一个空行
for line in f1:
    print(line)

输出如下:

3.14345345345

  23426534534

  45345123656

注意:直接使用open()返回对象,并且把这个对象逐行读取后和readlines()后逐行读取是一样的。

open()会把原来的文档对象保存到一个变量中。且在原来的每行末尾加一个看不见的'\n',我们姑且当成是直接打包一个文件(每行多加一个'\n')。逐行读取的时候和readlines()是一样的。但是readlines()会把一个文件以行为单位放在一个list中,但是

open()结果是把一个文档整体打包。但是open()返回对象和readlines()还有一个区别,readlines()返回的对象可以在with代码块之外使用,但是open()返回的对象只能在with代码块内使用。

file_name = 'pi_digits.txt'
with  open(file_name) as f1:
#下面的for代码块使用了f1,必须有缩进,因为使用f1只能在with代码块内使用
    for line in f1:
        print(line)

with open(file_name) as f2:
    lines = f2.readlines()
#下面的for语句可以有缩进也可以没有缩进,有缩进就意味着在with代码块内,没有缩进意味着在with代码块外
#使用,这两种都是可以的,所以相对而言,readlines()返回对象有更大的自由度
for line in lines:
    print(line.rstrip())
    
~                             

注意:readlines()返回对象可以在with代码块外使用,但是open()返回对象只能在with代码块内使用

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐