概述
seek()是Python File类里面的一个方法,用于移动文件读取指针到指定的位置。而readline()或readlines()就是根据这个文件读取指针的位置开始从文件读取数据
语法
seek()方法的语法如下:
fileObject.seek(offset, from)
参数说明:
offset :开始的偏移量,偏移offset个字节
from:可选,0(默认)表示文件起始位置,1表示当前位置,2代表文件末尾
实例1
下面将用实例演示一下seek()方法的用法
下面是‘test.txt’文件内容:
0123456789
0123456789
0123456789
代码:
file = open('test.txt', 'r') #只读方式,文件读取指针指向开头
print(file.tell()) #file.tell()返回当前读取指针
file_data = file.readline() #读取一行数据
print(file_data)
file.seek(3,0) #从0开始偏移3个字节
print(file.tell())
file_data = file.readline() #读取一行数据
print(file_data)
结果:
0
0123456789
3
3456789
上述结果之间空一行是因为读取了末尾的换行符
实例2
下面我再说一个例子,关于文件打开模式为‘a+’情况下的例子
文件跟上一个例子一样,先看代码:
file = open('test.txt', 'a+') #可读写方式,文件读取指针指向末尾,数据追加在末尾
print(file.tell()) #file.tell()返回当前读取指针
file.write('9876543210\n') #末尾写入数据
print(file.tell()) #文件写入后返回当前读取指针
file_data = file.readline() #读取一行数据
print('one' + file_data) #文件读取指针在末尾,读取数据为空
file.seek(0,0)
print('two' + file.readline()) #文件读取指针在开头,读取第一行数据
结果:
36
48
one
two0123456789
没有读取到数据是因为文件读取指针指向了末尾,所以在使用‘a+’模式时,如果要读取数据要利用seek(0,0)设置文件读取指针
‘test.txt’的变化:
0123456789
0123456789
0123456789
9876543210
上述这个例子是我学习Python文件操作时遇到的坑,在利用‘a+’模式打开文件并写入数据后,用readline()怎么都无法读取数据,后来了解到是因为文件读取指针在末尾,所以无法读取数据,要用seek(0,0)方法将文件读取指针重置,才可以读取数据。