pythonにおいてjsonデータや各変数の外部出力・保存には標準モジュールのpickleやjsonが用意されていますが、日本語などの表示は以下のようになります。
.py
data = {'ar': 'عربى', 'en': 'english', 'jp': '日本語', 'ko': '한국어'}
import pickle
with open('data.txt', 'wb') as f:
pickle.dump(data, f)
.sh
$ cat data.txt
{"ar": "\u0639\u0631\u0628\u0649", "en": "english", "jp": "\u65e5\u672c\u8a9e", "ko": "\ud55c\uad6d\uc5b4"}
jsonの場合は
.py
data = {'ar': 'عربى', 'en': 'english', 'jp': '日本語', 'ko': '한국어'}
import json
with open('data.txt', 'w') as f:
json.dump(data, f)
.sh
$ cat data.txt
▒}q(XarqعربىqXenqXenglishqXjpqX 日本語qXkoqX 한국어u.
これらは本来のロードして再利用という用途に問題はありませんが、ファイル単位でサクッと確認できないのが難点です。
追記:$ python -m pickle data.txt
で覗けます。LouiS0616様より
個人的には毎回手間だったので、モジュールを作りました。 pip install ppickle
でインストールできます。
.py
data = {'ar': 'عربى', 'en': 'english', 'jp': '日本語', 'ko': '한국어'}
import ppickle
ppickle.dump('data.txt', data) # 保存
loaded = ppickle.load('data.txt') # 呼び出し
print(loaded['jp']) # 日本語
print(loaded == data) # True
.sh
$ cat data.txt
{'ar': 'عربى', 'en': 'english', 'jp': '日本語', 'ko': '한국어'}
このように見た目通りがそのままファイルに保存されるようになります。
コア機能はcodecs、pprint、astを組み合わた9行で再現できます。pipの方は、loadできない形は書き出す時点で弾いたり、受け入れ可能な型を増やりと洗練したいと思っています。
ppickle.py
import codecs
import ast
from pprint import pformat
def dump(filename, data):
with codecs.open(filename, 'w', 'utf-8') as f:
f.write(stringed_data)
def load(filename):
with codecs.open(filename, 'r', 'utf-8') as f:
return ast.literal_eval(f.read())
現状listやdictしか受け入れられませんが、確認用に書き出す・ログ出力する際は中身がintがstrか空白あるかなどの確認できるよう元々リストで囲ってから出していたので、個人的には必要十分です。以上です。(絶対車輪の再開発だと思いますが、見つけられませんでした)