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()
的高级用法
-
指定读取字节数:
可以使用
size
参数指定要读取的字节数,直到遇到换行符或到达字节限制:with open('example.txt', 'r') as file: line = file.readline(5) # 读取5个字节 print(line) # 可能输出 "Line\n"
-
读取文件的特定行:
结合
readline()
和循环,可以读取文件中的特定行:with open('example.txt', 'r') as file: for i in range(2): # 读取前两行 line = file.readline() print(line, end='')
-
读取多行内容:
通过循环调用
readline()
方法,可以逐行读取文件内容:with open('example.txt', 'r') as file: while True: line = file.readline() if not line: break print(line, end='')
readline()
与 readlines()
的比较
readline()
的常见应用场景
-
处理大文件:
逐行读取大文件时比readlines()
更节省内存,因为它不将整个文件内容加载到内存中。 -
文件处理任务:
用于按需读取文件的每一行进行处理,比如日志分析、逐行查找特定内容等任务。
示例代码汇总
以下是一些 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:
break
print(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()) # 获得文件尾的指针,执行结果238
f.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'))