Python 文件中的tell和seek
对于一个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()
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2014-12-08 04:18:51
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!