在Python 2.7中,我有一个带有几个unicode列,integer列等的Pandas Dataframe。我需要能够将它编码的utf-8写入JSON Newline Delimited文件。
我尝试了此方法,但它仅在Python 3中有效,而在python 2.7中无效。
with io.open('myjson.json','w',encoding='utf-8') as f:
f.write(df.to_json(orient="records", lines=True, force_ascii=False))
这是我尝试的结果,但是如您所见,它未编码为utf-8。
{"account_id":"support","case_id":7697,"message":"\u0633\u0628 \u0627\u0644\u0644\u0647\u0627\u0644\u0644\u0647 \u0627\u0644\u0639","created_at":1536606086392,"agent":"108915"}
{"account_id":"support","case_id":7697924,"message":"\u0647\u0627\u064a","created_at":1536601516354,"agent":"108915"}
我认为这与this有关。但是我不确定。
我所做的其他研究表明,如果将其放入代码中,它会起作用。但是我也读到不推荐这样做。
import sys
reload(sys)
sys.setdefaultencoding('utf8')
答案 0 :(得分:0)
编辑-我错过了2.7部分-我通常使用3.5或更高版本。无论如何,使用python 2.7,我都能使用编解码器将unicode字符串转换为utf-8:
import codecs
codecs.unicode_escape_decode(a['message'])[0].encode("utf-8")
'\xd8\xb3\xd8\xa8 \xd8\xa7\xd9\x84\xd9\x84\xd9\x87\xd8\xa7\xd9\x84\xd9\x84\xd9\x87 \xd8\xa7\xd9\x84\xd8\xb9'
旧答案-
看起来pandas .to_json()的默认设置为sure_ascii = True,它将非ascii转换为Unicode。
来自文档:
to_json(path_or_buf=None, orient=None, date_format=None, double_precision=10, force_ascii=True, date_unit='ms', default_handler=None, lines=False, compression=None, index=True)
尝试将其设置为False:
df.to_json(force_ascii=False)
'{"agent":{"0":"108915"},"created_at":{"0":1536606086392},"message":{"0":"سب اللهالله الع"}}'
编辑-忘记了您正在寻找换行符分隔的内容,
>>> df.to_json(force_ascii=False, orient="records")
[{"agent":"108915","created_at":1536606086392,"message":"سب اللهالله الع"}]