seek方法简介

  • seek函数能够帮助我们File Handle,即文件处理
  • 在Python中,我们可以将seek()最简单理解为:移动光标或指针
  • 由于不能用鼠标移动光标,我们可以用seek()将光标移动到我们想要的位置,然后对文件进行写入等操作

参数

  • Syntax: f.seek(offset, whence),f指的是file(或$你的文件名)
  • Parameters:
    • offset: 将光标向前移动n个位置
    • whence: 参考位置,一般参数为0,1,2
      • 0 :将开头作为参考位置
      • 1 :将当前作为参考位置
      • 2 :将末尾作为参考位置
        (所谓参考位置(reference point)一开始你想在哪)

Example One

举例,我们对一个含有字符串的文本进行操作

代码解释
首先用字符串命名一个变量
将这个变量用StringIO函数作为文件储存在内存中

# 载入库
from io import StringIO
import numpy as np

# 创建字符串
string = 'ABC DEF GHI JKL MN.'

# 用StringIO()将我们创建的字符串变得像一个文件
# 这样我们就方便对文件进行操作了
# 或者有的小伙伴直接创建一个.txt文件然后open("xxx.txt", "r")也行
# 我比较懒哈哈哈哈
file = StringIO(string)

# 查看一下
print(file.read())

# 使用seek(),默认一开始在开头,移动四个位置试试
file.seek(4)

# 查看现在所在位置
print(file.tell())

# 输出光标后的内容,不意外应出现DEF开始往后的内容
print(file.read())

输出结果:

ABC DEF GHI JKL MN.
4
DEF GHI JKL MN.

Example Two

在上述文件后加入字符串
添加之前先将光标移到开头
运行时连带上面所有的一起从头开始跑

# 添加文字
file.write('--This song sounds good.')

# 将光标移到开头
file.seek(0)

#最后输出
print('Hello:\n',file.read())

输出结果:

ABC DEF GHI JKL MN.
4
DEF GHI JKL MN.
Hello:
 ABC DEF GHI JKL MN.--This song sounds good.

Example Three

也可以从末尾开始
但是在StringIO中无法使用seek(负数,2)
我们可以创建一个.txt,记得使用参数b进行操作

# 光标起始位置在末尾,往前移动5个位置
f = open("123.txt", "rb")
print(f.readline())
f.seek(-5, 2)
print(f.tell())
print(f.readline().decode('utf-8'))
f.close()

输出结果:

b'We all here to be a normal one.'
26
 one.

希望对您有所帮助~
我的学习笔记
欢迎收藏+关注~

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐