7.1.2 文件的读取

文件的读取有多种方法,可以使用readline()、readlines()或read()函数读取文件。下面将一一介绍这些函数读取文件的实现方法。

1.按行读取方式readline()

readline()每次读取文件中的一行,需要使用永真表达式循环读取文件。但当文件指针移动到文件的末尾时,依然使用readline()读取文件将出现错误。因此程序中需要添加1个判断语句,判断文件指针是否移动到文件的尾部,并且通过该语句中断循环。下面【例7-1】这段代码演示了readline()的使用。

【例7-1.py】


01     # 使用readline()读文件
02     f = open("hello.txt")
03     while True:
04         line = f.readline()
05         if line:
06             print (line)
07         else:
08             break
09     f.close()

【代码说明】

·第3行代码使用了“Ture”作为循环条件,构成1个永真循环。

·第4行代码调用readline(),读取hello.txt文件的每一行。每次循环依次输出如下结果。


hello world
hello China

·第5行代码,判断变量line是否为真。如果为真,则输出当前行的内容;否则,退出循环。

如果把第4行代码改为如下语句,读取的方式略有不同,但读取的内容完全相同。


line = f.readline(2)

该行代码并不表示每行只读取2个字节的内容,而是指每行每次读2个字节,直到行的末尾。

2.多行读取方式readlines()

使用readlines()读取文件,需要通过循环访问readlines()返回列表中的元素。函数readlines()可一次性读取文件中多行数据。下面这段代码演示了readlines()读取文件的方法。


01     # 使用readlines()读文件
02     f = open('hello.txt')
03     lines = f.readlines()
04     for line in lines:                       # 一次读取多行内容
05         print (line)
06   f.close()

【代码说明】

·第3行代码调用readlines(),把文件hello.txt中所有的内容存储在列表lines中。

·第4行代码循环读取列表lines中的内容。

·第5行代码输出列表lines每个元素的内容,即文件hello.txt每行的内容。

·第6行代码手动关闭文件。

3.一次性读取方式read()

读取文件最简单的方法是使用read(),read()将从文件中一次性读出所有内容,并赋值给1个字符串变量。下面这段代码演示了read()读取文件的方法。


01     # 使用read()读文件
02     f = open("hello.txt")
03     context = f.read()
04     print (context)
05     f.close()

【代码说明】

·第3行代码调用read(),把文件hello.txt中所有的内容存储在变量context中。

·第4行代码输出所有文件内容。

可以通过控制read()参数的值,返回指定字节的内容。下面通过【例7-2】的代码实现。

【例7-2.py】


01     f = open("hello.txt")
02     context = f.read(5)                # 读取文件前5个字节内容
03     print (context)
04     print (f.tell())                     # 返回文件对象当前指针位置
05     context = f.read(5)              # 继续读取5个字节内容
06     print (context)
07     print (f.tell())                   # 输出文件当前指针位置
08     f.close()

【代码说明】

·第2行代码调用read(5),读取hello.txt文件中前5个字节的内容,并存储到变量context中。此时文件的指针移到第5个字节处。

·第3行代码输出变量context的结果,输出的结果为“hello”。

·第4行代码调用tell(),输出当前文件指针的位置:5。

·第5行代码再次调用read(5),读取第6个字节到第10个字节的内容。

·第6行代码输出结果为“worl”。

·第7行代码输出当前文件指针的位置:10。

注意 file对象内部将记录文件指针的位置,以便下次操作。只要file对象没有执行close()方法,文件指针就不会释放。