鱼C论坛

 找回密码
 立即注册
查看: 8945|回复: 10

file的seek问题

[复制链接]
发表于 2015-4-21 17:04:12 | 显示全部楼层 |阅读模式

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

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

x
想实现对文件又读又写。。
    这里想实现对一个文本,每行的前面加入行号。。
    但是使用seek的时候出现问题了。

file_name = 'test.txt'
row_count = 1

file =  open(file_name,'r+')

while 1:
    text = file.readline().strip()
    print(file.tell())
    if text:
        file.seek(0,1)
        file.seek(-len(text),1)
        file.write(str(row_count) + ' : '+text + '\n')
        row_count += 1
    else:
        break
file.close()






  先读一行后,这个时候的文件指针就知道读一行数据后,然后用seek定位到读这行数据的起始位置,然后再写入一行数据


但是执行后,就报错

Traceback (most recent call last):
  File "G:\lujun\daima\python\2\file_test.py", line 12, in <module>
    file.seek(-len(text),1)
io.UnsupportedOperation: can't do nonzero cur-relative seeks


但是查手册,
seek(offset, whence=SEEK_SET) Change the stream position to the given byte offset. offset is interpreted relative to the position indicated by whence. Values for whence are:
  • SEEK_SET or 0 – start of the stream (the default); offset should be zero or positive
  • SEEK_CUR or 1 – current stream position; offset may be negative
  • SEEK_END or 2 – end of the stream; offset is usually negative
Return the new absolute position.

是可以设置后面那个参数不为0的。

   请问各位鱼友,这是什么问题了。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-21 17:21:28 | 显示全部楼层

回帖奖励 +5 鱼币

Python文档:

In text files (those opened without a b in the mode string), only seeks relative to the beginning of the file are allowed (the exception being seeking to the very file end with seek(0, 2)).


意思是对于非二进制的文本文件,不允许使用偏移定位。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2015-4-21 17:26:46 | 显示全部楼层

好的,谢谢了。。。。我用另外一种方法实现了,不过发现对文件又读又写是不行的。。会覆盖之后的数据。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-21 19:58:51 | 显示全部楼层

请问,对文本文件又读又写怎么操作比较简单,我的方法比较笨,先把源文件改名,将数据读出来,在修改,在新建原文件,把数据写进去。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-22 02:26:38 | 显示全部楼层

回帖奖励 +5 鱼币

支持一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-22 07:22:16 | 显示全部楼层

回帖奖励 +5 鱼币

支持一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-22 20:49:24 | 显示全部楼层

回帖奖励 +5 鱼币

支持一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-24 19:37:11 | 显示全部楼层

回帖奖励 +5 鱼币

python 有个内置的tempfile 模块的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-10-31 20:49:18 | 显示全部楼层
支持一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-29 15:01:15 | 显示全部楼层
weiqi7777 发表于 2015-4-21 17:26
好的,谢谢了。。。。我用另外一种方法实现了,不过发现对文件又读又写是不行的。。会覆盖之后的数据。。 ...

请问楼主另一种方法怎么实现,也碰到这个问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-8 12:55:33 | 显示全部楼层
支持一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 12:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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