【问题标题】:Writing floating point numbers to a file in "ab" mode以“ab”模式将浮点数写入文件
【发布时间】:2018-01-21 21:21:28
【问题描述】:

我正在使用 Python 3.5 64 位 Windows 操作系统。我正在尝试将浮点值写入文件。这是代码

 with open('report.txt' , "ab") as f:
      f.write(b"\n Result Pattern\n")
      f.write('%f' %test_accuracy)

我也尝试过新的'{}'.format 说明符。但是我收到以下错误

f.write('%f' %test_accuracy)
TypeError: a bytes-like object is required, not 'str'

那么,当文件模式为二进制时,如何指定写入数字的格式。另一点是,如果我尝试在没有二进制选项的情况下编写,我会得到一个错误。

更新: 我知道用 python 编写基本文件以及何时使用b。我有这个 numpy 代码的 sn-p,我也在其中将数组写入文件。

            np.savetxt(f , test_pat ,
                   header = 'A , B , C , D , E' ,
                   comments='' ,
                   delimiter = ',' ,
                   newline = '\r\n' ,
                   fmt = '%3d')

此时我收到上述错误,错误消息如下: fh.write(asbytes(comments + header + newline)) TypeError: write() argument must be str, not bytes

然后当我将模式切换到ab 时,错误就消失了。

\r\n 在通过记事本打开时尝试很好地格式化时是否存在问题?

另一个更新:

类似的错误和答案建议使用binary 模式! numpy savetxt append mode error

【问题讨论】:

  • f.write(b'%f' %test_accuracy) 这个?你也需要b
  • 我不明白,你为什么要以二进制模式编写,而看起来你想要一个文本文件?
  • 您需要确定您想要的文件类型。您目前似乎正在尝试混合文本和二进制文件。那是行不通的。选择一个并坚持下去。在这种情况下,正如@juanpa.arrivillaga 所说,它看起来甚至不需要二进制文件。
  • 好吧,你知道什么!,这是我尝试的第一件事,但得到了“未知格式代码 b”错误,但在我的代码中某处我错过了添加“b”选项这搞砸了。感谢您闪电般的快速响应。我真的需要第三只眼睛来纠正我的错误。我的错误现在解决了。
  • @juanpa.arrivillaga:我确实尝试过不使用二进制选项,但我得到“write() 参数必须是 str,而不是字节”错误。奇怪,它应该发生。

标签: python file


【解决方案1】:

试试:

with open('report.txt', "ab") as f:
    f.write(b"\n Result Pattern\n")
    f.write(b'%f' %test_accuracy) # you need to add b here.

【讨论】:

  • 欢迎@WilbusFugu。如果答案对您有用,请按答案左侧的复选标记将其标记为已接受,谢谢!
  • 这个答案是 my comment 的 cookie 截图。您还有什么要添加到评论中的?
  • 如何@cᴏʟᴅsᴘᴇᴇᴅ。 ?为什么你在评论之前没有回答这个问题?你感到困惑吗?
  • 我写了一个答案,因为我意识到 OP 的问题需要更深层次的解释才能解决,而不仅仅是告诉他们添加 b。我之前提到过,说Try this : 和发布代码对未来的读者来说不是一个有用的答案。
  • 但他的错误只发生在b。所以,我认为发布有用的代码比解释这个问题更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
相关资源
最近更新 更多