Python - TypeError:期望一个字符缓冲区对象

时间:2016-11-06 03:32:59

标签: python fwrite

我正在尝试写这些数据:

 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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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)

答案 2 :(得分:0)

试试这个:

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)

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

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)