【问题标题】:Python "wb" write mode adding 0x0A to filePython“wb”写入模式将0x0A添加到文件
【发布时间】:2019-08-05 19:15:32
【问题描述】:

我正在尝试将 32 字节的二进制数据写入文件,但正在添加一个额外的字节

wb 模式似乎不接受换行参数,所以我不确定在这里做什么。

str_ = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'


with open('test.bin', 'wb') as f:
    f.write(str_)

您必须在十六进制编辑器中查看文件才能看到添加的额外字节。 来自 VIM 的文件的十六进制视图:https://i.imgur.com/0VcjTCT.png

【问题讨论】:

  • 文件有 32 字节字节 VIM 显示 33 字节。也许 VIM 仅在显示时才在屏幕上添加此值。使用 VIM 前后文件的大小是多少?也许找到不同的编辑器来检查文件 - 或编写显示数据的脚本。
  • 测试评论dddd
  • 我无法重现您的问题 - 当我在 Linux 上显示 od test.bin(或 od -t x1 test.bin)以查看十六进制代码时,我只看到 32 个字节而没有 0x0A。而f.write() 不能添加新行。
  • xxd test.bin 也是如此 - 没有0x0A,它也只显示 32 个字节。

标签: python


【解决方案1】:
os.system('touch efuse.bin')
with open('efuse.bin', 'wb') as f:
    f.write(generateBinString())

为什么要写 newline=""

c=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
with open('efuse.bin', 'wb') as f:
    f.write(c.rstrip())

with open('efuse.bin', 'rb') as f:
    print(f.read())
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

换行 (0A) 和回车 (0D)

你能看到Python file.write creating extra carriage return

希望对你有帮助

【讨论】:

  • rstrip 不起作用。我 99% 确定 f.write() 正在添加换行字节
  • 当我看不到 0a 时,我该如何帮助您?
猜你喜欢
  • 2019-03-10
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 2020-09-20
  • 2021-03-12
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多