鱼C论坛

 找回密码
 立即注册
查看: 2536|回复: 2

file类关于seek指针问题

[复制链接]
发表于 2019-11-21 21:52:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求助:
我想从当前位置往前移动一个字符位置指针,或者说读取当前位置的上一个字符,如何做?

我做了些测试:
f=open('随意打开一个.txt')
f.read(1)
f.seek(f.tell()-1)  #或者f.seek(#此处一个具体数值,值为f.tell()-1),然后再f.read(1)会报错误
#f.seek()
f.read(1)

错误提示:
Traceback (most recent call last):
  File "<pyshell#108>", line 1, in <module>
    f.read(1)
UnicodeDecodeError: 'gbk' codec can't decode byte 0xda in position 2: illegal multibyte sequence


查了些相关文档:

操作文件指针可以通过seek方法:
  seek(offset, whence):移动文件指针
  offset:偏移量,可为负数
  whence:偏移相对位置

偏移相对位置为os模块当中的SEEK_SET、SEEK_CUR、SEEK_END:
  os.SEEK_SET:表示文件的相对起始位置
  os.SEEK_CUR:表示文件的相对当前位置
  os.SEEK_END:表示文件的相对结束位置


执行下列代码:
f.seek(-1,os.SEEK_CUR)
错误提示:

Traceback (most recent call last):
  File "<pyshell#117>", line 1, in <module>
    f.seek(-1,os.SEEK_CUR)
io.UnsupportedOperation: can't do nonzero cur-relative seeks

以上均为shell下运行的,求助,谢谢!!
目的想读取当前文件指针上一个字符位置。谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-11-22 18:26:18 | 显示全部楼层
f.seek() 中的参数是将指针移动到指定的字节上。f.seek(f.tell() - 1) 相当于将指针移动到一个汉字中间的字节,Python 无法读取。可以试试这样:

  1. f = open('随意打开一个.txt')
  2. f.read(1)
  3. f.seek(f.tell() - 2)
  4. f.read(1)
复制代码


或这样:

  1. f = open('随意打开一个.txt', encoding='utf-8')
  2. f.read(1)
  3. f.seek(f.tell() - 3)
  4. f.read(1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-22 19:55:48 | 显示全部楼层
首先感谢您的回答,我一会试试这种方法,不过大概率应该也不成功吧?

因为我搜了一些文章,看到有的文章说seek只能用于二进制文件,而非文本文档

所以后来换了一种思路解决问题:
方法是:把每一行放到一个列表里面,然后再用for i in len(list)遍历列表每个元素,从每个列表里读取每个元素的第一个字符
因为在列表里,所以压根不用考虑指针
这样就把一个文件变成了一个超大列表
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-20 22:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表