我正在尝试写这些数据:
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
我该如何纠正?我的数据结构有更好的文件格式吗?
答案 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)