python中的seek函数和tell函数详解(以及包含seek函数报错)

这篇具有很好参考价值的文章主要介绍了python中的seek函数和tell函数详解(以及包含seek函数报错)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.1 seek函数介绍

seek函数用于移动文件中指针位置和指定指针移动偏移量大小。
seek()函数格式为:

file. seek(offset[, whence])

offset是偏移量,可正可负,正数表示向后面移动offset位,负数表示向前面移动offset位;

whence有0,1,2三个参数,0表示将指针移动到文件开头,1表示将指针移动到当前位置,2表示将指针移动到文件结尾。

1.2 seek函数示例:

with open("字母表.txt", "r") as f:
    a = f.read()
    # 读取文件中所有字符
    print(a)

    # 从第三位开始输出
    f.seek(2, 0)
    print(f.read())  # 从索引2开始输出

# 结果输出为
ABCDEFGHIJKLMN
CDEFGHIJKLMN

1.3 使用f.seek(2,1)时报错

在f.seek(2,1)时报错:

with open("字母表.txt", "r") as f:
    a = f.read()
    # 读取文件中所有字符
    print(a)

    # 从第三位开始输出
    f.seek(2, 0)
    print(f.read())  # 从索引2开始输出

    # 从头开始,指针从第三个字符位置开始
    f.seek(3, 0)
    # 将指针从当前位置往后移动两个字符
    f.seek(2,1)
    print(f.tell())  # 此时输出结果应为5
    print(f.read())  # 从索引为5开始输出
    print(f.tell())  # 此时指针指向末尾

报错信息如下:

Traceback (most recent call last):
  File "D:/a_user_file/pycharm/1_lianxi/2_seek_tell.py", line 13, in <module>
    f.seek(2,1)
io.UnsupportedOperation: can't do nonzero cur-relative seeks

Process finished with exit code 1

出错原因:在选用读取文本时,seek()方法只有在文件开头(即参数whence为0时)进行偏移是被允许的。在当前所在位置(参数whence为1时)和文件末尾(参数whence为2时)时进行偏移是不被允许的。

修改后的代码:

with open("字母表.txt", "rb+") as f:
    a = f.read()
    # 读取文件中所有字符
    print(a)

    # 从第三位开始输出
    f.seek(2, 0)
    print(f.read())  # 从索引2开始输出

    # 从头开始,指针从第三个字符位置开始
    f.seek(3, 0)
    # 将指针从当前位置往后移动两个字符
    f.seek(2,1)
    print(f.tell())  # 此时输出结果应为5
    print(f.read())  # 从索引为5开始输出
    print(f.tell())  # 此时指针指向末尾

# 输出的结果为:
b'ABCDEFGHIJKLMN'
b'CDEFGHIJKLMN'
5
b'FGHIJKLMN'
14

1.4 seek函数因为偏移量设置错误导致报错

seek函数在计算偏移量时,英文字符和标点占用一个字符,中文则占用了三个字符。如果文件中的信息包含中文,则偏移量设置不正确也会导致报错。

with open("1.txt", "r+",encoding='utf-8') as f:
    a = f.read()
    # 读取文件中所有字符
    print(a)

    f.seek(3, 0)
    print(f.read())  
    
    f.seek(2, 0)# 此处会报错
    print(f.read())  

运行后的结果显示:

Traceback (most recent call last):
 File "D:/a_user_file/pycharm/1_lianxi/2_seek_tell.py", line 10, in <module>
   print(f.read())  # 从索引2开始输出
 File "D:\app_download\anaconda3_2.5.0\anaconda3\envs\tensorFlow\lib\codecs.py", line 321, in decode
   (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 0: invalid start byte
我爱你python
爱你python

Process finished with exit code 1

2.1 tell函数

tell函数能够返回指针在文件中的位置。

举例:

with open("字母表.txt","r") as f:
    a=f.read()
    # 读取文件中所有字符
    print(a)

    #从第三位开始输出
    f.seek(2)
    print(f.tell()) #指针位于第二个字符
    print(f.read())# 从索引2开始输出

    # 从头开始,指针从第三个字符位置开始
    f.seek(3,0)
    print(f.tell())# 输出结果为3
    print(f.read())# 从索引为3开始输出
    print(f.tell())# 此时指针指向末尾

输出结果为:文章来源地址https://www.toymoban.com/news/detail-494465.html

ABCDEFGHIJKLMN
2
CDEFGHIJKLMN
3
DEFGHIJKLMN
14

到了这里,关于python中的seek函数和tell函数详解(以及包含seek函数报错)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python中的range函数|python中的range函数|range()函数详解|Python中range(len())的用法

    range() 是 Python 内置的一个函数,用于生成一个整数序列。具体来说,它的定义如下: start、stop、step 分别表示序列的起始值、终止值和步长。start 和 step 是可选参数,如果不指定则默认为 0 和 1。 当只传入一个参数时,表示生成从 0 开始、小于该参数的整数序列。例如: 这

    2024年02月07日
    浏览(64)
  • Python中的睡眠函数用法详解

    Python中的睡眠函数用法详解 睡眠函数是Python中常用的函数之一,它允许程序在执行过程中暂停一段时间。在进行并发编程、定时任务或模拟等场景中,睡眠函数特别有用。本文将详细介绍Python中睡眠函数的用法,并提供相应的源代码。 Python中的睡眠函数由time模块提供,具体

    2024年02月05日
    浏览(55)
  • Python中的filter函数用法详解

    目录 引言 一、filter函数基本用法 二、filter函数应用场景 1、筛选符合条件的元素 2、数据清洗和预处理 3、复杂条件筛选 4、与其他函数结合使用 三、filter函数与lambda表达式 四、filter函数与列表推导式 五、总结 Python中的filter函数是一种内置的高效过滤器,用于从序列中筛选

    2024年02月21日
    浏览(56)
  • Python中的模块heapq以及使用方法详解

    1.1 nlargest(n, iterable, key=None) 函数 功能:获取可迭代对象iterable中n个最大的元素,返回这n个最大的元素列表(该列表从最大到小排列) 示例代码1: 示例代码2(参数key的用法): 1.2 nsmallest(n, iterable, key=None) 函数 功能:获取可迭代对象iterable中n个最小的元素,返回这n个最小的元素列

    2024年02月10日
    浏览(44)
  • 详解Python中的split()函数的使用方法

    函数:split() Python中有split()和os.path.split()两个函数,具体作用如下: split():拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list) os.path.split():按照路径将文件名和路径分割开 一、函数说明 1、split()函数 语法:str.split(str=\\\"\\\",num=string.count(str))

    2024年02月07日
    浏览(46)
  • Python 中的字符串分割函数 split() 详解

    更多Python学习内容:ipengtao.com 在 Python 编程中,处理字符串是一项常见的任务。字符串分割是其中的一个常见操作,而 Python 提供了强大的 split() 函数,用于将字符串拆分成多个部分。本文将详细介绍 split() 函数的用法、参数和示例代码,以帮助大家充分利用这个功能。 spl

    2024年04月27日
    浏览(36)
  • 详解python中的类似‘转ASCII’的ord函数和chr函数

    ord 函数和 chr 函数是Python中用于处理字符和Unicode码点的两个重要函数。 ord(char) 函数: ord 函数接受一个字符作为参数,返回该字符的Unicode码点(整数表示)。 例如, ord(\\\'A\\\') 将返回65,因为大写字母\\\"A\\\"的Unicode码点是65。 chr(unicode) 函数: chr 函数接受一个整数Unicode码点作为参

    2024年02月10日
    浏览(38)
  • Git提示Please tell me who you are(git提示Author identity unknown,git报错Please tell me who you are)

    Author identity unknown        译:作者身份未知 Please tell me who you are         译:请告诉我你是谁 原因: 这种情况一般都发生在更换设备后,在执行git commit命令时,出现的提示; 这说明你虽然把代码拉下来了,但是在推送代码时不知道你是谁,所以需要执行两行命令,告诉它

    2024年02月16日
    浏览(55)
  • Python中的`__all__`魔法函数使用详解

    Python是一门灵活而强大的编程语言,提供了各种机制来控制模块的导入和访问。其中, __all__ 魔法函数是一种用于限制模块导入的机制,可以明确指定哪些变量、函数或类可以被导入。本文将深入探讨 __all__ 的作用、用法以及示例,以帮助大家更好地理解和使用这一功能。

    2024年04月11日
    浏览(43)
  • Python中的数组拼接函数——np.concatenate使用详解

    Python中的数组拼接函数——np.concatenate使用详解 在Python的numpy库中,提供了一个用于数组拼接的函数——np.concatenate。该函数可以将多个数组沿一个指定的轴方向进行拼接,生成一个新的数组。其中,被拼接的数组可以是1维或n维数组。 拼接数组的实现需要指定拼接的方式和拼

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包