控制文件指针移动

1.指针移动
f.seek(offset,whence)***

offset代表文件的指针的偏移量,单位是字节bytes
whence代表参考物,有三个取值****
0:参照文件的开头
with open(r"C:\Users\LENOVO\PycharmProjects\untitled2\b.txt","r+t",encoding = "utf-8") as f:
f.read()
print(f.seek(18,0)) # 18
print(f.tell()) # 18 找到光标所在的位置

1:参照当前文件指针所在位置
with open(r"C:\Users\LENOVO\PycharmProjects\untitled2\b.txt","r+b") as f:
data = f.read()
print(data.decode("utf-8"))
print(f.seek(8,1))
print(f.tell())

2: 参照文件末尾
ps:快速移动到文件末尾f.seek(0,2) ***

强调:其中whence=1和whence=2只能在b模式下使用***

下面是不同参考物指针的情况(0:参考开头,1:参考指针当前位置 2:参考指针末尾)
f=open('c.txt',mode='rt',encoding='utf-8')
# f.seek(9,0) # 从开头开始统计
print(f.tell()) # 每次统计都是从文件开头到当前指针所在位置
# print(f.readline())

f.close()


f=open('c.txt',mode='rb')
f.readline()
f.seek(6,1) # 从光标所在的位置统计
print(f.readline().decode('utf-8'))
print(f.tell())
f.close()


f=open('c.txt',mode='rb')
f.seek(-9,2) # 从末尾向前开始统计
print(f.readline().decode('utf-8'))
print(f.tell())
f.close()



了解(**)
只有在t模式下的read(n),n代表的是字符个数,除此之外其他但凡涉及文件指针的移动都是以字节为单位的
f=open(r'C:\Users\LENOVO\PycharmProjects\untitled2\b.txt',mode='rt',encoding='utf-8')
print(f.read(3))
f.close()

f=open(r'C:\Users\LENOVO\PycharmProjects\untitled2\b.txt',mode='rb',)
print(f.read(3).decode('utf-8')) # 读三个字节
f.close()


ab a+b r+b

截断,
f=open(r'C:\Users\LENOVO\PycharmProjects\untitled2\b.txt',mode='at')
f.truncate(9) # 参照物永远是文件开头,从9个字节处开始截断,所以即使是追加模式,也是从头开始移动光标
f.close()



posted @ 2018-06-05 15:46  Roc_Atlantis  阅读(120)  评论(0编辑  收藏  举报