python tell,Python

对于一个file,调用tell()能够知道现在的文件位置,调用seek()可以改变文件指针的位置。

例如:文件中有3行句子,readline后位置就到了第一行的最后,

再readline就到了第二行的最后,此时调用tell()就获得了第二行末尾(换行符'\n')的位置

输出完tell()又使用seek(0),可以使文件位置又回到开头,下次再调用readline就会输出原来第一行的内容了,这应该是很容易理解的。

seek() 和 tell() 用法

seek() 改变文件位置,起始参考是文件头(第一行的第一个字节),单位为字节

tell() 输出当前字节流的位置,单位为字节

file.seek(offset[, whence])

offset         :    文件指针的位置

whence     :    指出第一个参数offset读取的相对位置,取值为 0, 1, 2

0 - 表示移动到一个绝对位置 (从文件开始算起), 默认seek(0,0) 表示文件头的第一个字符位置

1 - 表示移到一个相对位置 (从当前位置算起)

2 - 表示对于文件尾的一个相对位置,一般用于从后往前读,例如 file.seek(-2,2) 表示读取文件末尾最后两个字符

seek和tell示例

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# https://blog.mimvp.com

''' 测试文件 seek() 和 tell() 用法

seek() 改变文件位置,起始参考是文件头(第一行的第一个字节),单位为字节

tell() 输出当前字节流的位置,单位为字节

file.seek(offset[, whence])

offset : 文件指针的位置

whence : 指出第一个参数offset读取的相对位置,取值为 0, 1, 2

0 - 表示移动到一个绝对位置 (从文件开始算起), 默认seek(0,0) 表示文件头的第一个字符位置

1 - 表示移到一个相对位置 (从当前位置算起)

2 - 表示对于文件尾的一个相对位置,一般用于从后往前读,例如 file.seek(-2,2) 表示读取文件末尾最后两个字符

'''

filename = './test.txt'

# 初始化文件,写入三行

def init():

'''

blog

ithomer

com

'''

f = open(filename, 'w')

f.write('blog\n')

f.write('ithomer\n')

f.write('com')

f.close()

def main():

init()

f = open(filename, 'r')

print "输出整个文件内容"

print f.read()

print "\nseek 回到 0"

print("f.tell: " + str(f.tell())) # f.tell: 16

f.seek(0)

f.seek(-2, 2)

print("line 0: " + f.readline()) # line 0: om (读取文件末尾最后两个字符 'om')

print("f.tell_0: %d" % f.tell()) # f.tell_0: 16

f.seek(0)

print("line 1: " + f.readline()) # line 1: blog

print("f.tell_1: %d" % f.tell()) # f.tell_1: 5 (最后一个字符是 '\n')

f.seek(2, 1)

print("line 00: " + f.readline()) # line 00: homer (从上面的当前位置(第二行),跳过两个字符 'it')

print("f.tell_00: %d" % f.tell()) # f.tell_00: 13

f.seek(2) # 等同于 f.seek(2,0), 重新回到了文件头,跳过两个字符

print("line 2: " + f.readline()) # line 2: og (文件位置起始偏移了两个字节,跳过了'bl')

print("f.tell_2: %d" % f.tell()) # f.tell_2: 5

print("line 3: " + f.readline()) # line 3: ithomer

print("f.tell_3: %d" % f.tell()) # f.tell_3: 13 (最后一个字符是 'm',没有'\n')

if __name__ == '__main__':

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值