缓冲区大小VS在Python中读取二进制文件时的文件大小

时间:2014-04-23 03:42:06

标签: python file io binary

buffersize=50000
inflie = open('in.jpg','rb')
outfile = open('out.jpg','wb')

buffer = infile.read(buffersize)

while len(buffer):
    outfile.write(buffer)
    buffer = infile.read(buffersize)

我正在学习在python中读/写二进制文件的基础知识,并理解这段代码。 我非常感谢您理解这段代码。 谢谢!

  • Q1:缓冲区中的50000相当于50kb吗? (in.jpg大约150kb)
  • Q2:如何从输入文件中读取下一个数据增量(即下一个50,000字节的数据)? (在循环之前读取并存储前50,000个字节,然后写入输出文件,  如何读取下一个50,000字节而不增加范围?)
  • Q3:len(缓冲区)表示缓冲区(文件对象)的大小。什么时候在循环中变为假?

1 个答案:

答案 0 :(得分:0)

documentation回答了您的所有问题:

  

file.read([大小])

     

从文件中读取最多大小字节(如果读取在获取大小字节之前达到EOF,则更少)。如果size参数为负数或省略,则读取所有数据,直到达到EOF。字节作为字符串对象返回。立即遇到EOF时返回空字符串。 (对于某些文件,如ttys,在EOF被命中后继续读取是有意义的。)注意,此方法可能多次调用底层C函数fread(),以尽可能接近大小字节。另请注意,在非阻塞模式下,即使没有给出大小参数,也可能返回的数据少于请求的数据。

1:是的。 size参数被解释为多个字节。

2:infile.read(50000)表示“从infile读取(最多)50000个字节”。第二次调用此方法时,它将自动从文件中读取下一个50000字节。

3:buffer不是文件,而是您上次从文件中读取的内容。当缓冲区为空时,即当没有更多数据要从文件中读取时,len(buffer)将评估为False