文件指针

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'
posted @ 2022-09-01 13:42  python心蓝  阅读(203)  评论(0编辑  收藏  举报