如上代码,这是一个查找文件内容,替换指定内容的函数。文件长度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()
|