文件指针
open函数返回的文件对象使用文件指针
来记录当前在文件中的位置。
read方法
在读模式下,使用文件对象的read
方法可以读取文件的内容。
它接受一个整数参数表示读取内容的大小,文本模式下表示字符数量。
with open('test.txt', 'r', encoding='utf-8') as f:
content = f.read(2) # 读取两个字符
print(content)
输出:
锄禾
二进制模式下表示字节大小。
with open('test.txt', 'rb', encoding='utf-8') as f:
content = f.read(2) # 读取两个字节
print(content)
输出:
b'\xe9\x94'
如果省略,会读取文件的所有内容,大文件时慎用。
tell
方法
文件对象的tell方法返回整数,表示文件指针距离文件开头的字节数。
r
模式打开文件后文件指针指向文件开头,执行read操作之后,根据读取的数据大小指针移动到对应的位置。
with open('test.txt', 'r', encoding='utf-8') as f:
print(f.tell())
content = f.read(2) # 两个字符
print(content)
print(f.tell()) # utf-8一个字符3个字节,所以2个字符6个字节
输出:
0
锄禾
6
a
模式打开文件后文件指针指向文件末尾。
with open('test.txt', 'a', encoding='utf-8') as f:
print(f.tell())
输出:
243
seek
方法
通过文件对象的seek方法可以移动文件句柄
seek方法接收两个参数:
- offset 表示偏移指针的字节数
- whence 表示偏移参考,默认为0
- 0 表示偏移参考文件的开头,offset必须是>=0的整数
- 1 表示偏移参考当前位置,offset可以是负数
- 2 表示偏移参考文件的结尾,offset一般是负数
注意文本模式下只允许从文件的开头进行偏移,也即只支持whence=0
with open('test.txt', 'r', encoding='utf-8') as f:
print(f.read(2))
# 跳转到文件开头
f.seek(0)
# 再读取第一个字
print(f.read(1))
输出:
锄禾
锄
with open('test.txt', 'rb') as f:
# 读取文件最后的10字节
f.seek(-10,2)
print(f.read())
输出:
b'\xe5\x8f\x88\xe7\x94\x9f\xef\xbc\x81\n'