Python - TypeError: expected a character buffer object

Python - TypeError: expected a character buffer object

我正在尝试写入此数据:

 playlist =  {'playlist': {u'Up in Flames': 0, u'Oceans': 0, u'No Surprises': 0}}

像这样的文件:

 with open('playlist.txt', 'a') as f:
     f.write(playlist)

但它看起来像将 integers 写入文件生成器此错误:

TypeError: expected a character buffer object

我该如何纠正这个问题?我的数据结构有更好的文件格式吗?

playlist =  {'playlist': {u'Up in Flames': 0, u'Oceans': 0, u'No Surprises': 0}}

with open('playlist.txt', 'a') as f:
    f.write(str(playlist))

或者您可以使用 json 模块:

with open('playlist.txt', 'w') as f:
    json.dump(playlist, f)

您正在尝试将字典对象写入文本文件,因为该函数需要写入一些字符。如果您希望您的对象以您可以阅读的文本格式存储,您需要某种方式来构建您的数据,例如 JSON.

import json
with open('playlist.json', 'w') as f:
    json.dump(playlist, f)

还有其他选项,例如 xml 甚至 csv。如果您不关心您的数据是纯文本可读格式,您还可以查看 pickling 字典对象。

如评论中所述,您的问题将数据附加到文件,而不是写入新文件。这是 JSON 的问题,因为层次结构在附加时也不起作用。如果您需要添加到现有文件中,您可能需要为存储的文本提出不同的结构,读取现有文件,将其与新数据组合并重写(杰克休斯回答)......或者你可以写附加了一些解析代码 JSON,但我想这不是标准的重点。

试试这个:

import json
playlist =  {'playlist': {u'Up in Flames': 0, u'Oceans': 0, u'No Surprises': 0}}
with open('playlist.txt', 'a') as f:
 json.dump(playlist, f)

它可能会起作用;但是它可能会引发有关无法写入文件的错误。在这种情况下,您将不得不更改 open 语句中的 a 参数,并且您不能仅向文件追加写入。这里有一些方法可以解决这个问题:

import json
playlist =  {'playlist': {u'Up in Flames': 0, u'Oceans': 0, u'No Surprises': 0}}
with open('playlist.txt', 'r+') as f:
    playlist = playlist + json.dumps(f)
    json.dump(f, playlist)