ZetCode

Python readline 函数

最后修改时间:2025 年 3 月 26 日

本综合指南探讨了 Python 的 readline 函数,这是在 Python 中逐行读取文件的主要方法。我们将介绍基本用法、文件处理、上下文管理器和最佳实践。通过实际示例,您将掌握 Python 中逐行读取文件的方法。

基本定义

readline 函数每次被调用时,都会从文件中读取一行。它返回该行作为字符串,包括行尾的换行符。当到达文件末尾时,它返回一个空字符串。

readline 的主要特点:它在调用之间保持文件位置,对大型文件具有内存效率,并保留换行符。它非常适合处理不适合放入内存或需要逐行处理的文件。

readline 的基本用法

readline 最简单的用法是从文件中一次读取一行。每次调用都会将文件位置前进到下一行。

basic_readline.py
# Open a file for reading
file = open('example.txt', 'r')

# Read first line
line1 = file.readline()
print("First line:", line1)

# Read second line
line2 = file.readline()
print("Second line:", line2)

file.close()

这个例子以读取模式 ('r') 打开 'example.txt',使用 readline 读取第一行,然后读取第二行。每次调用 readline 都会返回文件中的下一行。每一行末尾的换行符包含在返回的字符串中。

记住在使用完毕后用 close 关闭文件。文件位置会自动随着每次 readline 调用而前进,跟踪下一次读取应该开始的位置。

用 readline 读取整个文件

您可以使用带有 readline 的循环逐行读取整个文件。这对于大型文件来说是内存高效的。

readline_loop.py
# Read entire file line by line
file = open('example.txt', 'r')

while True:
    line = file.readline()
    if not line:  # Empty string means EOF
        break
    print(line.strip())  # Remove newline and print

file.close()

这段代码逐行读取 'example.txt',直到 readline 返回一个空字符串,表明文件结束。strip 方法从每行中删除空格和换行符,然后再打印。

这种方法对于不应该完全加载到内存中的非常大的文件特别有用。它一次处理一行,使内存使用量保持不变,而与文件大小无关。

将 readline 与上下文管理器一起使用

with 语句创建一个自动关闭文件的上下文管理器。这是使用 readline 的推荐方式。

readline_context.py
# Using readline with context manager
with open('example.txt', 'r') as file:
    line = file.readline()
    while line:
        print(line.strip())
        line = file.readline()

这个例子演示了在 Python 中处理文件的首选方法。with 块确保在处理后正确关闭文件。循环持续到 readline 返回一个空字符串。

上下文管理器可以防止资源泄漏,并通过消除显式的 close 调用使代码更简洁。即使块中发生异常,它们也能正常工作。

用大小控制行读取

readline 接受一个可选的大小参数,以限制从该行读取的字符数。这对于固定宽度的格式可能很有用。

readline_size.py
# Using readline with size parameter
with open('data.txt', 'r') as file:
    # Read first 10 characters of first line
    part1 = file.readline(10)
    print("First 10 chars:", part1)
    
    # Read next 5 characters (continues same line)
    part2 = file.readline(5)
    print("Next 5 chars:", part2)
    
    # Read rest of line
    rest = file.readline()
    print("Rest of line:", rest)

这段代码演示了大小参数如何限制字符读取。第一次调用读取 10 个字符,下一次从同一行读取另外 5 个字符,最后一次调用读取该行的剩余部分。文件位置仅在当前行内前进,直到读取完整行。

当使用 size 参数时,readline 将在读取指定数量的字符或遇到换行符时返回,以先到者为准。

比较 readline 和迭代

文件对象在 Python 中是可迭代的,为逐行读取提供了一种替代 readline 的方法。这两种方法都有其用途。

readline_vs_iter.py
# Comparing readline and file iteration
with open('example.txt', 'r') as file:
    print("Using readline:")
    line = file.readline()
    while line:
        print(line.strip())
        line = file.readline()
    
    file.seek(0)  # Rewind file
    
    print("\nUsing iteration:")
    for line in file:
        print(line.strip())

这个例子展示了读取行的两种方法。readline 方法提供了更多的控制(比如大小限制),而迭代更简洁。这两种方法都为大型文件保持了内存效率。

迭代方法通常是简单逐行读取的首选方法,而当您需要精确控制或想要读取部分行时,readline 更好。

最佳实践

资料来源

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。到目前为止,我已经撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出所有 Python 教程