这是一个理论问题,因为我没有实际问题,但我想知道......
如果我有一个巨大的文件,说很多演出,我想改变一个字节,我知道该字节的偏移量,我怎么能有效地做到这一点?有没有办法在不重写整个文件而只写单字节的情况下执行此操作?
我在Python 文件 api中没有看到任何可以让我写入文件中特定偏移量的内容。
答案 0 :(得分:8)
只要您不需要插入或删除字节,就可以在"r+"
模式下打开文件,使用{{3}方法将文件对象定位在要更改的字节处,并写出一个字节。
使用低级seek
操作可能更有效,它们不执行任何应用程序级缓冲。
如果你做需要插入或删除字节,抱歉,你运气不好:没有重写整个文件就无法做到这一点(从第一次插入或删除)。这是POSIX(和AFAIK也是Windows)低级文件API的限制,而不是Python的限制。
答案 1 :(得分:2)
您可以搜索()到一个位置并写一个字节。它将覆盖那里的内容,而不是插入。
答案 2 :(得分:2)
在文件中寻找该位置并写入一个字节。 Python中的文件对象有一个seek方法,它从某个常量中获取整数偏移量:
seek(offset[, whence])
whence参数是可选的,默认为0(绝对文件定位);其他值为1(相对于当前位置的搜索)和2(相对于文件的末尾搜索)。
答案 3 :(得分:0)
以下是可能要执行的操作的好教程:http://diveintopython3.ep.io/files.html#read
'seek'是查找所需字节的方法。上面的链接谈到你需要采取的警告