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

[复制链接]
787|1
 楼主| djz1992 发表于 2020-11-6 10:25 | 显示全部楼层 |阅读模式
如上代码,这是一个查找文件内容,替换指定内容的函数。文件长度363680。每次读取固定的长度。前面都很正常,但是读到4759的位置后再读取,这一次就会出错,指定读取32个字节,但是实际只能读到31个。
程序就认为到了文件末尾,退出了读取。


123.png


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

  4. src_offset = 0
  5. dest_offset = 0
  6. src = open(src_name,'r')
  7. # src = open(src_name,'r+')
  8. dest = open(dest_name,'w+')

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

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



 楼主| djz1992 发表于 2020-11-6 15:47 | 显示全部楼层
找到原因,windows环境下,以文本方式(text mode)读入数据时,0x1A == 26 == ctrl-Z == EOF. 程序在读取到0x1A,认为已经读到文件末尾。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

115

主题

620

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部