编写二进制文件时Python中缺少字节?

编写二进制文件时Python中缺少字节?,python,binary-data,Python,Binary Data,在用Python编写二进制文件时,我似乎缺少一些字节。我已经用“write”函数和“array.tofile”函数尝试过了。下面是一些示例代码: import zlib, sys, os, array from struct import unpack from array import array inputFile = 'strings.exe' print "Reading data from: ", inputFile print 'Input File Size:', os.p

在用Python编写二进制文件时,我似乎缺少一些字节。我已经用“write”函数和“array.tofile”函数尝试过了。下面是一些示例代码:

import zlib, sys, os, array
from struct import unpack
from array import array


inputFile = 'strings.exe'

print "Reading data from: ", inputFile

print 'Input File Size:', os.path.getsize(inputFile)

f = open(inputFile, 'rb')
#compressedDocument = 

document = f.read()
documentArray = array('c', document)
print 'Document Size:', len(documentArray)

copyFile = open( 'Copy of ' + inputFile, 'wb')
documentArray.tofile(copyFile)
#copyFile.write(document)
copyFile.close


print 'Output File Size:', os.path.getsize('Copy of ' + inputFile)

print 'Missing Bytes:', os.path.getsize(inputFile) - os.path.getsize('Copy of ' + inputFile)
f.close()
提供以下输出:

Reading data from:  strings.exe
Input File Size: 136592
Document Size: 136592
Output File Size: 135168
Missing Bytes: 1424

我不明白为什么没有写入这些字节。我在多个丢失字节数不同的文件上尝试过这种方法。

如果您实际尝试比较这两个二进制文件(如果您在unix下使用
cmp
命令),您将看到这两个文件是相同的


编辑:正如John在回答中正确指出的那样,字节大小的差异是由于在测量文件长度之前没有关闭文件。代码中正确的行应该是
copyFile.close()
[调用方法]而不是
copyFile.close
[方法对象]。

在调用输出文件上的
os.path.getsize
之前,您没有关闭输出文件。您写入的135168字节是33 x 4096字节块。。。尝试
copyFile.close()
而不是
copyFile.close

是的,它们是相同的。使用cmp和md5sum,它们看起来相同。我应该先检查一下。是的,我相信它将与文件元数据相关。谢谢你,元数据??“描述符的差异”?你能告诉我“strings.exe”文件的内容吗?我无法重现我的filesWill+1这个明天的问题(今天可用票数已用完)。我在自己的回答中引用了这一点。@mac:你的回答得到了55分,你为什么不删除它,而不是将我的答案复制到其中?问题是关于未写入的字节,我正确地指出这两个文件确实相同。我弄错的是python返回的大小错误的原因(事实上这是一个假设的句子,而不是一个确定的“这是因为这个”),我把它粘贴在正确的解释中,引用了你和+1'引用了你的答案。如果你嫉妒的话,我当然可以删除这一部分的答案。我只是觉得它对未来的游客更有用。如果您想让我删除该位,请告诉我!:)