搜索功能无法更新特定位置的文件 - python

seek function doesn't work to update a file in a specific position - python

我实际上正在做一个使用 UDP 发送文件的项目,由于这个协议不可靠,我在每个数据包上添加了一些信息,这是数据的索引。所以我可以按照正确的顺序写入接收到的数据。 我在文件中的特定位置写入字节时遇到问题

这是我处理写入新数据的代码部分:

    while i < packet_num:
    buf,address = recieve_packet(s,data_size+10)
    i += 1
    if buf:
        print(buf)
        index = int(buf[0:10].decode())
        data = buf[10:]
        f.seek(seek_pointer + index*data_size,0)
        f.write(data)
        list_index.append(index)

在这种情况下,搜索功能无效,数据只是附加到文件中。我正在使用 "a+b" 模式打开文件。

引用自tutorialspoint.com,

Note that if the file is opened for appending using either 'a' or 'a+', any seek() operations will be undone at the next write.

"a" 模式 write 操作追加到文件末尾。 seek 的作用是将 write/read 指针设置为文件中的特定位置。

因此,当调用 write 时,它将写入文件末尾,而不管 read/write 指针。

但是,因为您已经在 a+b 中打开了文件,您将能够搜索到特定位置并 read 它。

如果您使用 'append' 模式打开,所有写入都会到达文件末尾。如果 ypu 已经在跟踪接收数据的位置,那么您需要做的就是以 w+b 模式打开。

wb 创建(或清空)文件,并允许写入(以二进制形式,而不是文本模式)。 w+b 作用相同,但也允许阅读。如果你想打开一个现有文件而不截断它,模式 r+b 将允许读取和写入,同时保留现有数据(同样, b 是二进制模式,我希望它是正确的你的用途)。