Rit*_*esh 8 python json typeerror
我正在以 json 格式从 twitter 获取数据并将其存储在文件中。
consumer_key = 'Consumer KEY'
consumer_secret = 'Secret'
access_token = 'Token'
access_secret = 'Access Secret'
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
api = tweepy.API(auth)
os.chdir('Path')
file = open('TwData.json','wb')
for status in tweepy.Cursor(api.home_timeline).items(15):
simplejson.dump(status._json,file,sort_keys = True)
file.close
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "/Users/abc/anaconda/lib/python3.6/json/__init__.py", line 180, in dump
fp.write(chunk)
TypeError: a bytes-like object is required, not 'str'
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 13
json 模块总是生成 str 对象,而不是 bytes 对象。因此,
fp.write()必须支持str输入。
您以二进制模式打开文件。不要这样做,b从文件模式中删除:
file = open('TwData.json','w')
Run Code Online (Sandbox Code Playgroud)
最好使用绝对路径而不是更改工作目录,如果您将文件用作上下文管理器(带有with语句),则在块完成时它会自动为您关闭。这有助于避免诸如忘记实际调用file.close()方法之类的错误。
如果你打算将多个 JSON 文档写入文件,至少在每个文档之间放置一个换行符,使其成为JSON 行文件;这在以后更容易解析:
with open('Path/TWData.json', 'w') as file:
for status in tweepy.Cursor(api.home_timeline).items(15):
json.dump(status._json, file, sort_keys=True)
file.write('\n')
Run Code Online (Sandbox Code Playgroud)
或者,将所有内容放入映射或列表等顶级对象中,然后将该单个对象写入文件以创建有效的 JSON 文档。