繁体   English   中英

Python-TypeError:应使用字符缓冲区对象

[英]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

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

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

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

还有其他选项,例如xml甚至csv。 如果您不关心数据是纯文本可读格式的,也可以考虑对字典对象进行腌制

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

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)

尝试这个:

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) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM