【问题标题】:How to write bytes to file?如何将字节写入文件?
【发布时间】:2012-08-23 13:19:53
【问题描述】:

我有一个返回字符串的函数。该字符串包含回车符和换行符(0x0D,0x0A)。但是,当我写入文件时,它只包含新的换行符。有没有办法让输出包含回车符和换行符?

msg = function(arg1, arg2, arg3)
f = open('/tmp/output', 'w')
f.write(msg)
f.close()

【问题讨论】:

  • 阅读file.__doc__

标签: python


【解决方案1】:

如果要写入字节,则应以二进制模式打开文件。

f = open('/tmp/output', 'wb')

【讨论】:

  • 由于 OP 似乎使用的是非 Windows 平台,因此这只适用于 Py3。在 Py2 中,您需要使用 io.open
  • 我认为这是python本身的一个bug,鉴于python可以在运行时检测数据类型,并且可以检测二进制和文本输入之间,我认为它应该在python本身修复,为什么数百最终出现在此页面的人,如果可以通过 python stdlib 中的 if 语句避免它,如果您同意,请投票,如果必须,请拒绝我做遗忘。
  • @FelipeValdes 不幸的是,如果内容被错误地检测到,这可能会在编写内容时带来意外。更烦人的是,错误检测只会发生在某些奇怪的边缘情况下,这些情况会变得令人惊讶且难以追踪。相反,依赖显式行为,即使这意味着我们有这个问题,也可以确保我可以确定 IO 在不同场景下的行为方式。
  • 字节文件有什么扩展名?
  • @FelipeValdes 它与最小意外/惊讶原则有关 (en.wikipedia.org/wiki/Principle_of_least_astonishment)。您的方法将更贴切地命名为:open_and_detect_file_type()
【解决方案2】:

这只是一个带有with 的“更清洁”版本:

with open(filename, 'wb') as f: 
    f.write(filebytes)

【讨论】:

  • with 的最佳实践,因为文件对象会自动关闭。
【解决方案3】:

如果不存在则写入字节并创建文件:

f = open('./put/your/path/here.png', 'wb')
f.write(data)
f.close()

wb 表示以write binary 模式打开文件。

【讨论】:

  • 能够在没有+ 值的wb+ 中创建文件(新),如您的回答中所述。所以只需执行,python with open('data.csv', 'wb') as file_obj: file_obj.write(csv_data) 根据 REPL 和 python 文档中的帮助(打开)Py3.7#reading&writingfiles
  • @IsaacPhilip 它在没有 + 的情况下也适用于我,所以更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
相关资源
最近更新 更多