【问题标题】:Buffer size VS File size when reading binary file in Python在 Python 中读取二进制文件时的缓冲区大小 VS 文件大小
【发布时间】:2014-06-07 16:45:06
【问题描述】:
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 个字节在 while 循环之前读取并存储,然后写入输出文件, 接下来的 50,000 个字节如何在范围内没有任何增量的情况下被读取?)
  • Q3:len(buffer) 表示缓冲区(文件对象)的大小。这在 while 循环中何时变为 false?

【问题讨论】:

  • 您能否阐明第二季度中“范围内的增量”是什么意思?

标签: python file io binary


【解决方案1】:

documentation 回答你所有的问题:

file.read([大小])

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

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

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

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

【讨论】:

    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多