我有一个文件大小为10240字节。这是我的脚本来获得文件大小:Python:为什么我从不同于sys.getsizeof()的文件读取大小?
fh = open(name, "r")
data = fh.read(10240)
print sys.getsizeof(data)
输出:10277
我读10240个字节从文件,但是当我打印的大小,我得到10277.我如何确保我不读取超过10240字节?我应该向我的消费者发送10240字节,但看起来它正在发送更多。
我有一个文件大小为10240字节。这是我的脚本来获得文件大小:Python:为什么我从不同于sys.getsizeof()的文件读取大小?
fh = open(name, "r")
data = fh.read(10240)
print sys.getsizeof(data)
输出:10277
我读10240个字节从文件,但是当我打印的大小,我得到10277.我如何确保我不读取超过10240字节?我应该向我的消费者发送10240字节,但看起来它正在发送更多。
要获得长度的data
,请使用len(data)
。假设你的文件足够大,len(data)
将等于10240;它不会超出你的要求。
sys.getsizeof()
返回内存中Python对象的总大小,包括运行时使用的任何额外开销。它在大多数Python应用程序中通常都不是很有用。
getsizeof()调用对象的的sizeof方法,如果目的是通过垃圾收集器管理增加了额外的垃圾收集器的开销。
所以你从getsizeof
获得额外的大小实际上是垃圾收集数据的Python增加了bytes
对象,因此它知道如何删除该文件中的数据,当你用它做,和其他任何只有运行时需要知道的数据。
当您序列化bytes
对象以将其发送给您的使用者时,此开销将被序列化器丢弃,所以不用担心。如果您需要知道实际发送了多少个字节,请使用len()
函数。
谢谢Jonathon。那么我怎样才能读取字节而不是字符呢? – NoName
在Python 2中,没有区别。像'file.read()'这样的东西返回的所有“缓冲区”都是'str'类型,就像任何其他字符串一样。 –
'fh = open(name,“rb”)'将读取python 2和3中的字节。 – tdelaney