打印

python read固定长度,未到文件结尾,却读取不全

[复制链接]
552|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djz1992|  楼主 | 2020-11-6 10:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
如上代码,这是一个查找文件内容,替换指定内容的函数。文件长度363680。每次读取固定的长度。前面都很正常,但是读到4759的位置后再读取,这一次就会出错,指定读取32个字节,但是实际只能读到31个。
程序就认为到了文件末尾,退出了读取。





为什么呢???@ufbycd @icecut @dirtwillfly @xyz549040622 @m564522634
def replace_words(src_name, dest_name,src_words, dest_words):
file_size = os.path.getsize("./" + src_name)
print("file_size: %d" % file_size)

src_offset = 0
dest_offset = 0
src = open(src_name,'r')
# src = open(src_name,'r+')
dest = open(dest_name,'w+')

print("Src words: %s" % src_words)
print("Dest words: %s" % dest_words)
if len(src_words) != len(dest_words):
print("Words is't same!")
os._exit()
while True:
src.seek(src_offset, 0)#指针指向文件特定位置
dest.seek(dest_offset, 0)#指针指向文件特定位置
readed = src.read(len(src_words))#从当前位置读取指定长度
if len(readed) != len(src_words):#如果读到的长度不等于指定长度,说明已经到文件末尾
dest.write(readed)#将读取到的复制到目标文件
break
else:
if cmp(readed, src_words) == 0:#读取到的内容与需要替换的内容相同
print("Replace %s" % dest_words)
readed = dest_words#替换掉读取到的内容
src_offset += len(src_words) - 1
dest_offset += len(dest_words) - 1
dest.write(readed)#将读取到的复制到目标文件
src_offset += 1
dest_offset += 1

print("Src file size: %d" % src_offset)
print("Dest file size: %d" % dest_offset)
src.close()
dest.close()



使用特权

评论回复

相关帖子

来自 2楼
djz1992|  楼主 | 2020-11-6 15:47 | 只看该作者
找到原因,windows环境下,以文本方式(text mode)读入数据时,0x1A == 26 == ctrl-Z == EOF. 程序在读取到0x1A,认为已经读到文件末尾。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:人生苦短,冬日苦长,正是青葱,却无骄阳

115

主题

620

帖子

5

粉丝