在Python中循环二进制文件-从头到尾删除添加

在Python中循环二进制文件-从头到尾删除添加,python,file-io,binaryfiles,Python,File Io,Binaryfiles,有人能告诉我一种在Python中循环二进制文件的方法吗?我有一个文件,基本上是4字节整数,当文件达到一定大小时,即写入了一定数量的值,我想开始从开头删除一个,然后在结尾添加一个 我对Python还是相当陌生的,所以我只想想出一种简洁的方法来实现这一点 谢谢。我的想法:文件中的第一个整数给出了数据实际开始的位置。在开始时,这将是4(假设一个整数需要4个字节)。当文件已满时,只需开始覆盖开头的数据并增加位置整数。这基本上是一个简单的文件格式。2000个数字 那是16K。在记忆中做这件事。实际上,通过

有人能告诉我一种在Python中循环二进制文件的方法吗?我有一个文件,基本上是4字节整数,当文件达到一定大小时,即写入了一定数量的值,我想开始从开头删除一个,然后在结尾添加一个

我对Python还是相当陌生的,所以我只想想出一种简洁的方法来实现这一点


谢谢。

我的想法:文件中的第一个整数给出了数据实际开始的位置。在开始时,这将是4(假设一个整数需要4个字节)。当文件已满时,只需开始覆盖开头的数据并增加位置整数。这基本上是一个简单的文件格式。

2000个数字

那是16K。在记忆中做这件事。实际上,通过将缓冲区声明为16K,您可能可以在单个I/O请求中完成整个操作。在一些大型64位系统上,默认缓冲区大小为2000个左右

你的数据量是微小的。不要浪费时间优化如此少量的数据

with open( "my file.dat", "rb", 16384 ) as the_file:
    my_circular_queue = list( read_the_numbers( the_file ) )

if len(my_circular_queue) >=  2000:
    my_circular_queue = my_circular_queue[1:]
my_circular_queue.append( a_new_number )

with open( "my file.dat", "wb", 16384 ) as the_file:
    write_the_numbers( the_file, my_circular_queue )

它完全符合记忆。不要浪费时间尝试复杂的更新。

有多少是“满的”?一百万?十亿?几十亿?我不确定这是否重要?我定义的一个数字,当它达到我想要的周期时。2000年左右,为什么这么重要?最多10亿,你可以在内存中完成。10亿美元之后,你需要更聪明的东西。你定义的数字非常重要。对于2000年,在内存中完成整个任务,不要再考虑它。这可以很好地工作,但在Python中,如果不重写整个部分,您似乎无法写入文件的前面-例如,查找然后写入似乎不起作用?我真的不想每次都重新写入整个列表,因为它是vlarge@亚当·科布:你得多问一个问题。您可能需要在查找或类似操作之前刷新文件。使用此问题中的建议使其正常工作-。使用“r+b”作为文件模式。感谢您的回答,但我选择了Space_C0wb0y的解决方案,我相信在内存中这样做会很好,但这些写入操作可能会定期发生,我不希望每次都将整个列表加载到内存中进行写回(即使只有2000)@Adam Cobb:2000浮点数占用16K内存。在某些系统上,默认I/O缓冲区大于此值。这是一个可以忽略不计的微观数据量。在数据量非常小的情况下,尝试巧妙地处理复杂的I/O方案是在浪费时间。