开发者学堂课程【Python 语言基础 3:函数、面向对象、异常处理:seek( ) 和 tell( )】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/601/detail/8773
seek( ) 和 tell( )
内容介绍:
一、二进制读文件
二、tell( )
三、seek( )
一、二进制读文件
demo.txt 中继续写为 Lorem 的内容,之前以文本形式读取,现在想要以二进制形式去读取
输入
with open('demo.txt' , 'rb') as file_obj:
print(file_obj.read( ) )
形式与之前文本去读的内容大致无区别,但是前面多了 b ,这表示现在的字符串是一个二进制字符串
输入:print(file_obj.read( 100 ) )
读取 100 个字符,但读的是二进制,所以实际上是 100 个字节,但是像英文,一个字符就是一个字节,所以似乎没有什么区别
二、tell( )
#tell ( ) 方法用来查看当前读取的位置
print('当前读取到了-->' , file_obj.tell( ) )
print(file_obj.read( 100 ) )
print(file_obj.read( 30 ) )就是读取到130
三、seek( )
#seek( ) 可以修改当前读取的位置
file_obj.seek( )
先注释掉已读的:
with open('demo.txt' , 'rb') as file_obj:
#print(file_obj.read( 100 ) )
#print(file_obj.read( 30 ) )
#file_obj.seek( )
print('当前读取到了-->' , file_obj.tell( ) )
然后 file_obj.seek( 55 )
先执行:
这时再从 55 个开始读
print(file_obj.read(5))
可以连续改变,先不读,先看位置:
with open('demo.txt' , 'rb') as file_obj:
#print(file_obj.read( 100 ) )
#print(file_obj.read( 30 ) )
file_obj.seek( 55 )
file_obj.seek( 80 )
#print(file_obj.read(5))
print('当前读取到了-->' , file_obj.tell( ) )
可以看到改变了位置
注意:seek( ) 需要两个参数
第一个 是要切换到的位置
第二个 计算位置方式
可选值:
0 从头计算
1 从当前位置计算
2 从最后位置开始计算
比如 file_obj.seek( 80 )
改为 file_obj.seek( 80,0
), 还是 80
file_obj.seek( 55 )
file_obj.seek( 80,0 )
file_obj.seek( 70,1 )
表示从 80 开始,往后读 70 个,是 150
file_obj.seek( 55 )
file_obj.seek( 80,0 )
file_obj.seek( 70,1 )
file_obj.seek( 1,2 )
表示从最后位置开始往后走一个
那么能不能从 452 开始往后读内容呢?
print(file_obj.read( ))
没有内容,因为文本长度一共为 451,所以读不出来
改为 file_obj.seek( -1,2 ),
表示从后计算减一个,读出来就是最后一个.
file_obj.seek( -10,2 ),
就是最后十个
此外,seek( ) 也可以对文本文件使用,但是要注意文本字符到底占几个字节,并相应做一些判断