2017-02-23 106 views
1

我有一个文件大小为10240字节。这是我的脚本来获得文件大小:Python:为什么我从不同于sys.getsizeof()的文件读取大小?

fh = open(name, "r") 
data = fh.read(10240) 
print sys.getsizeof(data) 

输出:10277

我读10240个字节从文件,但是当我打印的大小,我得到10277.我如何确保我不读取超过10240字节?我应该向我的消费者发送10240字节,但看起来它正在发送更多。

回答

6

要获得长度data,请使用len(data)。假设你的文件足够大,len(data)将等于10240;它不会超出你的要求。

sys.getsizeof()返回内存中Python对象的总大小,包括运行时使用的任何额外开销。它在大多数Python应用程序中通常都不是很有用。

+0

谢谢Jonathon。那么我怎样才能读取字节而不是字符呢? – NoName

+0

在Python 2中,没有区别。像'file.read()'这样的东西返回的所有“缓冲区”都是'str'类型,就像任何其他字符串一样。 –

+0

'fh = open(name,“rb”)'将读取python 2和3中的字节。 – tdelaney

1

From the Python 3.6 docs:

getsizeof()调用对象的的sizeof方法,如果目的是通过垃圾收集器管理增加了额外的垃圾收集器的开销。

所以你从getsizeof获得额外的大小实际上是垃圾收集数据的Python增加了bytes对象,因此它知道如何删除该文件中的数据,当你用它做,和其他任何只有运行时需要知道的数据。

当您序列化bytes对象以将其发送给您的使用者时,此开销将被序列化器丢弃,所以不用担心。如果您需要知道实际发送了多少个字节,请使用len()函数。

相关问题