【问题标题】:How do I write binary data to a text file in Python?如何在 Python 中将二进制数据写入文本文件?
【发布时间】:2017-11-03 19:23:39
【问题描述】:

我需要先写入文本,然后将二进制数据写入文件。例如,我想用内容编写文件:

BESTFORMAT
NUMLINES 42
FIELDS FOO BAR SPAM
DATATYPES INT32 FLOAT64 FLOAT64
FILETYPE BINARY
???d?'Ӈ T???'Ѥ??X??\??
?? R??&??X??\???????
??zR??X??\????????
...

但是,在 Python 中,您无法以可以写入 ASCII 数据,然后是二进制数据的方式打开文件。


我试过了:

  • 将我的二进制数据转换为文本(不好,因为它输出 b'5 42.7 0.8'

  • 将我的文本数据编码为二进制并将文件作为二进制打开(不好,因为那时我有一个二进制文件)。编辑:事实证明这是有效的,但我需要在我的文本编辑器中使用 UTF-8 编码打开文件

【问题讨论】:

标签: python binary-data file-format


【解决方案1】:

多种解决方案:

  1. 写入文本数据,然后以追加二进制模式重新打开并写入二进制数据
with open("file", "w") as f:
    f.write("text")
with open("file", "ab") as f:
    f.write(b"bytes")
  1. 将文本数据转换为字节
with open("file", "wb") as f:
    f.write("text".encode())
    f.write(b"bytes")
  1. 将文本数据写入文本包装器
import io
with open("file", "wb") as f:
    f_text = io.TextIOWrapper(f, write_through=True)
    f_text.write("text")
    f.write(b"bytes")

注意:某些文本编辑器会在文件中看到非 utf-8 字节,并以十六进制模式查看文件。要查看文本,请在文本编辑器中以 UTF-8 编码重新打开文件

【讨论】:

  • 你可以使用fl.write(b"BESTFORMAT\n\ NUMLINES 42\n\ FIELDS FOO BAR SPAM\n\ DATATYPES INT32 FLOAT64 FLOAT64\n\ FILETYPE BINARY\n\ "),所以你可以使用文件的二进制模式
猜你喜欢
  • 2014-09-29
  • 2014-07-10
  • 2022-01-04
  • 1970-01-01
  • 2021-11-30
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多