一、seek方法简介
seek()
是 Python 中用于移动文件读取指针到指定位置的函数,它的基本语法为:
file.seek(offset[, whence])
其中 offset 参数代表偏移量(相对于 whence 参数所指的位置),whence 参数则是可选参数,用于设置偏移量的基准位置,其可选值有:
- 0: 从文件开始位置计算,即从起始位置偏移;
- 1: 从当前指针位置开始计算;
- 2: 从文件末尾开始计算。
二、应用案例:按行读取文件
在 Python中读取文件时,一般使用 readline()
函数按行读取,但是这种读取方式效率较低,在读取大文件时需要耗费大量时间。
以下代码是按行读取文件的传统方式:
f = open('file.txt', 'r')
while True:
line = f.readline()
if not line:
break
print(line, end='')
f.close()
使用 seek()
函数可以高效地按行读取文件,代码如下:
f = open('file.txt', 'r')
while True:
pos = f.tell()
line = f.readline()
if not line:
break
print(line, end='')
next_pos = f.tell()
f.seek(pos + len(line) - next_pos, 1)
f.close()
在上述代码中,每次读取一行后使用 tell()
函数获取当前读取指针的位置,再使用 simple math 获取下一行开始的位置,接着重新定位读取指针即可。
三、应用案例:跳过若干行再开始读取
在读取文件时,有时候需要先跳过几行内容再开始读取,以下代码演示了如何使用 seek()
函数实现跳过 n 行后再开始读取:
f = open('file.txt', 'r')
n = 10
for i in range(n):
f.readline()
while True:
line = f.readline()
if not line:
break
print(line, end='')
f.close()
改写为:
f = open('file.txt', 'r')
n = 10
f.seek(n, 1)
while True:
line = f.readline()
if not line:
break
print(line, end='')
f.close()
在上述代码中,使用 seek()
函数从当前位置向前偏移 n 个字符。
四、应用案例:文件追加
在 Python 中,向文件中添加新的内容非常常见,以下代码演示了如何使用 seek()
函数在文件末尾进行追加:
f = open('file.txt', 'a+')
f.seek(0, 2)
f.write('append')
f.seek(0)
print(f.read())
f.close()
在上述代码中,首先使用 a+
模式打开文件,然后使用 seek()
函数将读取指针移动到文件末尾,紧接着就可以使用 write()
函数向文件中添加新的内容。
五、总结
文件读取是 Python 开发中经常涉及到的操作之一,使用 seek()
函数可以提高读取效率、跳过特定行数和实现文件追加功能。掌握了 seek()
函数的使用,可以使文件读取操作更加高效,减小程序运行时间。