【问题标题】:Why am I only writing 28,672 bits to this file?为什么我只向该文件写入 28,672 位?
【发布时间】:2020-03-31 17:46:32
【问题描述】:

我一直在从事一个项目,需要将某种二进制文件编程到 AT28C256 芯片上。除了文件大小必须为 32,768 字节(确切地说)之外,细节并不重要。

我这里有一些“小问题”代码:

o = open("images.bin", "wb")
c = 0
for i in range(256):
    for j in range(128):
        c += 1
        o.write(chr(0).encode('utf-8'))
print(c)

对我来说,这似乎将 32,768 字节写入文件(拆分为 i,j 是必要的,因为我需要将图像写入设备)为 128*256 = 32768。而 c 的输出是32768!

但它创建的文件是 28672 字节长!这是 7000 十六进制的事实并没有让我忽略,但我不确定为什么会发生这种情况。有什么想法吗?

【问题讨论】:

  • 您应该使用上下文管理器(with 声明)来处理文件,这将保证始终调用 .close()
  • 谢谢!我完全没有意识到这一点。

标签: python python-3.x binaryfiles file-writing


【解决方案1】:

您应该调用o.close() 来刷新写入缓冲区并正确关闭文件。

【讨论】:

  • 做到了!您对不这样做会发生什么有任何见解吗?
  • 当您以字节为单位写入输出时,只要写入缓冲区已满,实际的磁盘写入就会以块的形式完成。如果您不关闭文件句柄,最后一块数据将保留在内存缓冲区中。通常在程序退出之前,它会自动为您关闭所有打开的文件句柄,但并不总是保证这种行为。最好在完成向其写入数据后始终关闭文件句柄,这通常可以通过with 语句来以 Python 方式完成。
  • 具体来说,__del__ 方法不能保证在解释器退出时仍然存在的对象上被调用。
猜你喜欢
  • 2014-01-04
  • 2019-08-01
  • 1970-01-01
  • 2015-02-23
  • 2018-02-26
  • 1970-01-01
  • 2019-11-11
  • 2017-02-21
相关资源
最近更新 更多