Python readlines 函数
最后修改时间:2025 年 3 月 26 日
本综合指南探讨了 Python 的 readlines
函数,这是一种逐行读取文件的强大方法。我们将介绍基本用法、内存注意事项、上下文管理器、编码处理和最佳实践。通过实际示例,您将掌握 Python 中基于行的文件读取。
基本定义
readlines
函数从文件对象中读取所有行,并将它们作为字符串列表返回。每个字符串代表文件中的一行,包括末尾的换行符。当您需要单独处理文件的每一行时,此函数特别有用。
与将整个内容作为单个字符串返回的 read
不同,readlines
在行边界处拆分内容。该函数自动处理不同的平台特定的行尾 (Windows, Unix, Mac) 并将它们转换为 \n
。
基本的 readlines 用法
readlines
最简单的用法是将文件的所有行读取到列表中。列表中的每个元素对应于文件中的一行。
# Open a file and read all lines with open('example.txt', 'r') as file: lines = file.readlines() for line in lines: print(line.strip()) # Remove newline character
此示例以读取模式打开 'example.txt',使用 readlines
将所有行读取到列表中,然后处理每一行。 strip
方法删除每行中的空格和换行符。
with
语句确保正确的文件关闭。 结果列表中的每一行都以换行符结尾,这就是我们打印时使用 strip
的原因。 此行为与行在实际文件中显示的方式相匹配。
读取特定数量的行
readlines
函数可以接受大小提示参数来限制读取的数据量。 这有助于处理非常大的文件。
# Read approximately 1000 bytes worth of lines with open('large_file.txt', 'r') as file: lines = file.readlines(1000) print(f"Read {len(lines)} lines") for line in lines: print(line.strip())
此代码尝试从文件中读取大约 1000 字节的行。 返回的实际行数可能会有所不同,因为 Python 读取完整的行直到达到大小限制。 这对于分块处理大型文件很有用。
大小提示不保证读取的确切字节数 - 它读取完整的行,直到总大小接近提示。 这可以防止部分行读取。 该函数始终返回完整的行,永远不会在中间中断一行。
使用 readlines 处理行
readlines
返回的列表可以像任何 Python 列表一样进行处理。 此示例演示了过滤和转换行。
# Process lines from a file with open('data.txt', 'r') as file: lines = file.readlines() # Filter empty lines and comments cleaned_lines = [line.strip() for line in lines if line.strip() and not line.startswith('#')] # Convert valid lines to uppercase upper_lines = [line.upper() for line in cleaned_lines] print("Processed lines:") for line in upper_lines: print(line)
此代码读取所有行,然后过滤掉空行和注释(以 # 开头的行)。 剩余的行转换为大写。 列表推导提供了一种简洁的方式来处理行。
该示例展示了 readlines
如何与 Python 的列表处理功能集成。 您可以链接多个转换和过滤器,以直接从文件内容创建强大的数据处理管道。
比较 readlines 与迭代
虽然 readlines
一次将所有行读取到内存中,但直接迭代文件对象对于大型文件来说更节省内存。
# Memory-efficient line reading print("Using readlines (all lines in memory):") with open('large_file.txt', 'r') as file: lines = file.readlines() for line in lines[:5]: # Only show first 5 lines print(line.strip()) print("\nUsing iteration (memory efficient):") with open('large_file.txt', 'r') as file: line_count = 0 for line in file: # Reads one line at a time print(line.strip()) line_count += 1 if line_count >= 5: break
第一种方法将所有行加载到内存中,这对于非常大的文件来说可能存在问题。 第二种方法一次读取一行,使用最少的内存。 文件对象本身在 Python 中是可迭代的。
对于小文件,这两种方法都很好。 对于大文件(几 GB),首选迭代。 当您需要在内存中存储所有行以进行随机访问或多次传递数据时,readlines
很方便。
处理不同的编码
当在文件打开期间指定时,readlines
函数可以使用不同的文件编码。 这对于国际文本文件至关重要。
# Reading a UTF-8 encoded file try: with open('multilingual.txt', 'r', encoding='utf-8') as file: lines = file.readlines() for line in lines: print(line.strip()) except UnicodeDecodeError: print("Error: Could not decode the file with UTF-8 encoding") # Reading a file with fallback encoding with open('legacy.txt', 'r', encoding='latin-1', errors='replace') as file: lines = file.readlines() for line in lines: print(line.strip())
第一个示例尝试读取 UTF-8 文件,该文件支持大多数语言。 如果文件包含无效的 UTF-8 序列,则会引发异常。 第二个示例使用 Latin-1 编码,并使用错误替换来处理旧文件。
处理文本文件时,请始终考虑编码。 Python 3 默认为 UTF-8,但许多旧系统使用不同的编码。 errors
参数控制如何处理解码错误(忽略、替换等)。
最佳实践
- 使用 with 语句:始终使用上下文管理器进行文件处理
- 考虑内存使用情况:对于大文件,直接迭代文件对象
- 处理编码:始终指定正确的文件编码
- 清除行尾:记住在需要时删除换行符
- 处理异常:捕获文件操作的 IOError 和编码问题的 UnicodeDecodeError
资料来源
作者
列出所有 Python 教程。