seek函数无法更新文件在特定位置 - python
我实际上正在使用UDP发送文件的项目,并且由于此协议不可靠,我在每个数据包上添加了一些信息,这些信息是数据的索引。所以我可以按正确的顺序写入收到的数据。 我有问题写在特定位置字节文件seek函数无法更新文件在特定位置 - python
这是处理新数据写入我的代码的一部分:在这种情况下
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”模式打开文件。
注意,如果文件被打开使用是“a”或“A +”追加,任何寻求()操作将在下次写撤消。
“a”模式write
操作追加到文件末尾。 seek
所做的是将写入/读取指针设置为文件中的特定位置。
因此,当一个write
被调用时,它将写入文件的结尾,而不管读/写指针如何。
但是,由于您打开了a+b
中的文件,您将能够找到特定的位置和read
它。
如果使用'append'模式打开,则所有写入都将转到文件末尾。如果ypu已经在跟踪接收数据的位置,那么只需打开w+b
模式即可。
wb
创建(或清空)文件,并允许写入(以二进制而不是文本模式)。 w+b
是否一样,但也允许阅读。如果要在不截断现有文件的情况下打开现有文件,模式r+b
将允许读取和写入,同时保留现有数据(同样,b
用于二进制模式,我认为这对于您的使用是正确的)。
是模式“w + b”的作品与“wb”相同,因为我想更新文件,我不想失去旧的数据.. –
是的确实它工作时,我打开文件使用“WB”,但我需要“AB”,因为我部分发送文件(在ODER处理大文件)有没有解决这个问题? –
您可以先用'r'模式打开现有文件,并获取内容。之后,您可以使用'w'模式重新创建文件,并写入现有评论,并搜索并添加新内容。 – Dashadower
@RS Halim但是要小心,如果您使用大型文件,则可能会遇到内存错误。 – Dashadower