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()
的常见应用场景
-
处理大文件:
逐行读取大文件时比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'))