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

时间:2011-07-07 10:26:59

标签: 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.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

我不明白为什么没有写这些字节。我已经在多个文件中尝试了这种方法,其中包含不同数量的丢失字节。

2 个答案:

答案 0 :(得分:5)

您没有关闭输出文件,然后再致电os.path.getsize 。你写的135168字节是33 x 4096字节块...尝试copyFile.close()而不是copyFile.close

答案 1 :(得分:4)

如果您实际尝试比较两个二进制文件(如果您使用的是cmp命令,则会看到这两个文件是相同的。

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