主动控制文件内指针移动
1.计算机基础2.编程语言和Python语言介绍3.八大基本数据类型4.python语法入门变量和常量5.python和pycharm相关补充6.计算机五大部件补充7.文件操作8.编码和解码9.字符编码10.基本数据类型的内置方法11.循坏结构12.流程控制13.基本运算符14.程序与用户交互15.迭代器16.闭包函数17.装饰器18.多层语法糖嵌套19.函数的参数20.函数的可变长参数21.命名关键字参数22.名称空间与作用域23.异常处理24.深浅拷贝问题25.函数的定义和调用26.控制文件读写内容的模式
27.主动控制文件内指针移动
28.文件的操作方法29.垃圾回收机制GC30.可变与不可变类型31.元类32.内置方法33.pickle模块34.单例模式35.方法补充issubclass和isinstance36.多态37.继承38.面向对象的三大特性39.封装40.内置函数41.面向对象42.logging模块43.subprocess模块44.正则45.datetime模块46.time模块47.绝对路径和相对路径48.random模块49.os模块50.hashlib模块51.模块与包52.json模块53.生成器54.三元运算符主动控制文件内指针移动
- 文件内指针的移动时以Bytes为单位的,但是在t模式下时read(n),n以字符美单位的。
#文件内指针的移动时以Bytes为单位的,但是在t模式下时read(n),n以字符美单位的
with open('02.txt','rt',encoding='utf-8')as f:
res=f.read(3)#hel 读取三个字符
print(res,type(res))#<class 'str'>
with open('02.txt','rb')as f:
res=f.read(3)#b'hel'
print(res,type(res))#<class 'bytes'>
seek移动指针
- 之前文件内指针的移动都是由读/写操作而被动触发的。
- 若想读取文件某一特定位置的数据,则需要用f.seek()方法主动控制文件内指针的移动,详细用法如下:
- f.seek(指针移动的字节数,模式控制):
-
模式控制:
- 0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的
- 1: 该模式代表指针移动的字节数是以当前所在的位置为参照的
- 2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的
强调:
- 其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用
(1)0模式详解
- 注意:
- 由于在t模式下,会将读取的内容自动解码,所以必须保证读取的内容是一个完整中文数据,否则解码失败。
- 在b模式下,要对读取的二进制数据进行解码
# 0模式
# #t 模式下
# with open('02.txt','rt',encoding='utf-8')as f:
# f.seek(3,0)#光标从开始移动了三个字节
# print(f.tell())#3 当前光标距离开头的位置为3
# print(f.read())#苏毅航 从光标位置读取到末尾
# 注意:由于在t模式下,会将读取的内容自动解码,所以必须保证读取的内容是一个完整中文数据,否则解码失败
# #b 模式下 要对读出的二进制数据进行解码
# with open('02.txt','rb')as f:
# f.seek(3,0)#光标从开始移动了三个字节
# print(f.read().decode('utf-8'))#苏毅航 从光标位置读取到末尾
(2)1模式
- 只能在b模式下使用
- b模式下读取数据时,要对读取的数据进行解码
# #1模式
# # b模式
# with open('02.txt','rb')as f:
# # f.seek(6,1)#光标从当前位置移动到第6个字节后
# # f.tell()#距离开头的位置有6个字节
# # print(f.tell())#6
# # print(f.read())#读取余下的字符 b'\xe6\xaf\x85\xe8\x88\xaa'
# f.seek(3,1)#光标从开始位置移动了3个字节
# print(f.tell())#距离开头位置有3个字节
# print(f.read())#读取余下的内容 b'\xe8\x8b\x8f\xe6\xaf\x85\xe8\x88\xaa'
# print(f.read().decode())#对于下内容解码 苏毅航
(3)2模式
- 只能在b模式下使用
- b模式下读取数据时,要对读取的数据进行解码
# #2模式
# #b模式
# with open('02.txt','rb')as f:
# # f.seek(0,2) #参照物为末尾,移动了0个字节,还在末尾
# # print(f.tell())#12 距离开头的位置有12个字节
# # print(f.read())#读剩下的内容 b''
# f.seek(-6,2)#从末尾向前移动了6个字节
# print(f.tell())#距离开头有6个字节
# print(f.read())#读取余下内容 b'\xe6\xaf\x85\xe8\x88\xaa'
# print(f.read().decode())#对于下内容解码 毅航
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)