【发布时间】:2011-10-26 06:14:53
【问题描述】:
我一直在研究将二进制文件的字节映射到另一组字节的函数。我正在读取和写入同一个文件。我的问题是每次我这样做时都会得到额外的字节,除非我在关闭文件之前移动到文件的末尾,这是我的代码:
with open(self._path,'r+b') as source:
for lookAt in range(0,self._size[1]*self._size[2],1):
source.seek(lookAt*self._size[0],0)
readBuffer = array.array('B')
readBuffer.fromfile(source, self._size[0])
newLine = array.array('B',[mappingDict[mat] for mat in readBuffer])
source.seek(lookAt*self._size[0],0)
newLine.tofile(source)
source.seek(0,2) # Magic line that solves stupid bug
source.close()
我使用数组模块来读取和写入数据,因为我在使用 read() 和 write() 时遇到了同样的问题。我不明白为什么“魔术线”可以解决问题,因为它从未使用过。我会很感激我能得到的任何见解。
【问题讨论】:
-
映射字典中有什么?字节或 unicode / 字符串?另外,
_size0、1和2中的内容是什么? -
因为你使用的是
with,所以最后一行source.close()是不必要的。
标签: python python-3.x binaryfiles