您的位置:首页 > 房产 > 家装 > python的readline()和readlines()

python的readline()和readlines()

2025/1/10 3:57:13 来源:https://blog.csdn.net/xulibo5828/article/details/140406413  浏览:    关键词:python的readline()和readlines()

readlines()

readlines() 是 Python 中用于从文件对象中读取所有行的方法。它会一次性读取整个文件内容,并将每一行作为一个字符串存储在一个列表中返回。

使用方法和返回值

  • 使用 readlines() 方法可以读取文件的所有内容,每一行作为列表中的一个元素。
  • 如果文件很大,一次性读取可能会占用较多内存,因此在处理大文件时需要注意内存消耗。

示例说明

假设有一个文本文件 example.txt 包含以下内容:

Hello Python!
This is a test file.
Goodjob!

可以通过以下代码使用 readlines() 方法读取文件的所有行:

file_path = 'example.txt'
with open(file_path, 'r') as file:lines = file.readlines()for line in lines:print(line.strip())  # 使用 strip() 方法去除每行末尾的换行符

运行这段代码后,将会输出文件的每一行内容:

Hello Python!
This is a test file.
Goodjob!

注意事项

  • 返回的列表中每个元素是一个字符串,包含文件中相应行的内容。
  • 每行末尾的换行符 \n 会被保留在字符串中,如果需要可以使用字符串的 strip() 方法去除。

readlines() 是在需要一次性读取整个文件内容,并且希望将每一行分别处理时非常有用的方法。

readline()

readline() 是 Python 中用于从文件对象中读取单行内容的方法。它按行读取文件,每次调用 readline() 会读取文件的下一行。

readline() 的使用方法

基本语法
line = file.readline(size=-1)

  • size(可选):指定要读取的字节数。默认是 -1,表示读取整行内容,包括行末的换行符。如果提供一个正整数,则会读取指定字节数的内容,直到遇到换行符或到达字节限制。
返回值
  • 返回的内容:读取到的内容是字符串形式的一行(包括行末的换行符)。如果到达文件末尾,则返回一个空字符串 ''
  • 返回值示例
    # 读取到的行
    line = "This is a line of text.\n"
    

示例代码

假设有一个文件 example.txt,内容如下:

Line 1
Line 2
Line 3

以下是使用 readline() 方法读取文件内容的代码示例:

# 打开文件
with open('example.txt', 'r') as file:# 读取第一行line1 = file.readline()print(line1, end='')  # 输出 "Line 1"# 读取第二行line2 = file.readline()print(line2, end='')  # 输出 "Line 2"# 读取第三行line3 = file.readline()print(line3, end='')  # 输出 "Line 3"

在这个示例中,readline() 方法每次读取文件的下一行,直到文件结束。

readline() 的高级用法

  1. 指定读取字节数

    可以使用 size 参数指定要读取的字节数,直到遇到换行符或到达字节限制:

    with open('example.txt', 'r') as file:line = file.readline(5)  # 读取5个字节print(line)  # 可能输出 "Line\n"
    
  2. 读取文件的特定行

    结合 readline() 和循环,可以读取文件中的特定行:

    with open('example.txt', 'r') as file:for i in range(2):  # 读取前两行line = file.readline()print(line, end='')
    
  3. 读取多行内容

    通过循环调用 readline() 方法,可以逐行读取文件内容:

    with open('example.txt', 'r') as file:while True:line = file.readline()if not line:breakprint(line, end='')
    

readline() 与 readlines() 的比较

方法功能返回值类型使用场景
readline()读取单行内容单行字符串逐行读取文件内容
readlines()读取文件所有行列表(每行是一个字符串)一次性读取整个文件内容

readline() 的常见应用场景

  1. 处理大文件
    逐行读取大文件时比 readlines() 更节省内存,因为它不将整个文件内容加载到内存中。

  2. 文件处理任务
    用于按需读取文件的每一行进行处理,比如日志分析、逐行查找特定内容等任务。

示例代码汇总

以下是一些 readline() 的使用示例:

# 打开文件并读取第一行
with open('example.txt', 'r') as file:first_line = file.readline()print(f"First line: {first_line.strip()}")# 读取每一行并处理
with open('example.txt', 'r') as file:while True:line = file.readline()if not line:breakprint(f"Processing line: {line.strip()}")# 使用 readline(size) 读取指定字节数
with open('example.txt', 'r') as file:part_of_line = file.readline(4)print(f"First 4 bytes of the first line: {part_of_line}")

这些示例展示了如何使用 readline() 读取文件的单行内容、逐行处理文件以及按字节数读取部分内容。

需要注意:

执行完后的指针位置

当每一次执行完readline() ,文件的指针都位于下一行的开头。而执行完readlines()后,文件的指针位于文件末尾。下面这段代码可以看出而执行完readlines()后的指针位置正是位于文件的尾部。

with open('demo.csv', 'r', encoding='gbk') as f:f.seek(0, 2)   # 将指针移至文件尾print(f.tell())   # 获得文件尾的指针,执行结果238f.seek(0)  # # 将指针移至文件头lines = f.readlines()print(f.tell())   # 执行结果238

 两种方法都是从指定的文件指针作为起点开始读取

with open('demo.csv', 'r', encoding='gbk') as f:f.seek(20)  # 将指针移至文件头的20字节lines = f.readlines()   # 从指针处开始读取print(lines)

或:

with open('demo.csv', 'r', encoding='gbk') as f:f.seek(20)  # 将指针移至文件头的20字节line = f.readline()   # 从指针处开始读取print(line)

 但是如果有汉字字符,需注意不要将汉字的字节拆开,否则会报错。

使用文件指针读取文件最后的几行 

当文件很大,比如是某个运行日志,每次只需要读取最后的几行,就可以采用:

def tail(file_path, num_lines):with open(file_path, 'r', encoding='gbk') as f:# 将文件指针移到文件末尾f.seek(0, 2)# 获取文件末尾位置end_pos = f.tell()lines = []line_count = 0# 逐行向前读取文件内容,直到达到指定的行数或文件开头for pos in range(end_pos - 1, -1, -2):f.seek(pos)next_char = f.read(1)if next_char == '\n':# lines.append(f.readline().rstrip('\n'))   用readline()的方法line_count += 1# f.seek(pos-1)if line_count == num_lines:lines = f.readlines()   # 用readlines()的方法break# 返回结果,注意如果用readline()的方法要逆序输出return lines# return lines[::-1]    # 逆序输出# 调用函数并显示最后5行内容
file_path = 'demo.csv'
num_lines = 5
last_lines = tail(file_path, num_lines)
for line in last_lines:print(line.rstrip('\n'))

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com