一、readlines()函数的基本用法
with open('example.txt', 'r', encoding='utf8') as f:
lines = f.readlines()
for line in lines:
print(line)
readlines()函数是Python中用于读取文件内容的函数之一。该函数返回一个列表,列表的每个元素对应输入文件中的一行文字。在文件读取过程中,输入文件会被Python自动分成若干行,在每个换行符处分割成列表的一个元素。readlines()函数经常被用于需要将整个文件内容一次性读入内存的情况。
在上面的代码中,首先通过with语句打开了名为example.txt的文件,并将其赋值给变量f。由于采用了with语句,所以无需再手动关闭打开的文件。然后使用f.readlines()函数一次性读入example.txt文件的所有内容,并将其赋值给变量lines。最后使用for循环遍历lines列表中的每个元素,也就是打印出文件的每一行内容。
二、对读入文件内容进行处理
with open('example.txt', 'r', encoding='utf8') as f:
lines = f.readlines()
words = []
for line in lines:
words += line.strip().split(' ')
print(words)
readlines()函数返回的列表中,每个元素都是字符串形式的文本行。如果需要将文本拆成单个单词或者每个单词指定分隔符,可以使用Python的字符串函数split()。将每一行使用split()函数拆分后,每个单词一定是以空格隔开的。此时,我们可以通过遍历每一行,将每个单词加入到一个新的列表words中。
在上面的代码中,我们首先定义一个空列表words,然后遍历读入的文件内容。对于每一行,我们使用strip()函数删除其中的空白字符,接着用split()函数将该行拆成不同的单词,并将这些单词加入列表words中。最后使用print()函数打印结果。
三、读取大型文件的分块处理技巧
from itertools import islice
with open('example.txt', 'r', encoding='utf8') as f:
while True:
lines = list(islice(f, 1000))
if not lines:
break
for line in lines:
process(line)
readlines()函数将整个文件内容一次性读入内存。在处理小型文件时,这种方法无异,但是当文件较大时,readlines()函数会占用大量的内存,可能导致Python程序崩溃。为此,我们可以使用Python的迭代器islice(),对大型文件进行分块处理。
在上面的代码中,我们导入Python自带的迭代器模块,并将需要处理的文件example.txt打开。之后使用Python的while True循环,每次读取1000行,将它们存储到一个列表lines中。如果到文件结尾了,list(islice(f, 1000))就会返回一个空列表,此时可以跳出循环。最后遍历lines列表中的每个元素,对每一行文本进行处理。
四、逐行读取文件内容进行实时处理
with open('example.txt', 'r', encoding='utf8') as f:
for line in f:
process(line)
如果需要对大型文件进行实时处理,则应该逐行读取文件内容,并对每行进行处理。逐行读取可以使用Python的for循环来完成,如上例所示。
在上面的代码中,我们使用with语句打开example.txt文件,然后使用for循环,对于文件中的每一行,我们都调用了函数process进行处理。
五、读取二进制文件并转换为字符串
with open('example.jpg', 'rb') as f:
img = f.read()
imgstr = img.decode('utf8')
readlines()函数和for循环等读取文本文件内容的方法都需要以文本模式('r')打开文件。如果想要读取二进制文件,就需要使用二进制读取模式('rb')打开文件。例如,要读取图片文件,则需要使用二进制模式打开文件,这时读入的是图片的二进制文件。
在上面的代码中,我们使用with语句打开一个图片文件example.jpg,并且使用字节串方式('rb')读取了图片二进制内容。由于img是一个字节串,我们需要将其转换成字符串。为了实现这一点,可以使用Python自带的字符编码工具,如在decode()函数中指定utf8编码。
六、小结
本文讲解了Python中读取文件内容的基本方法:利用readlines()函数一次性读取整个文件内容、处理大型的文件内容分块读取、以及逐行读取文件实现实时处理等。除此之外,还介绍了如何将二进制文件读取为字符串。这些方法可以满足不同场景中的文件读取需求。