请教一个写入字典到文件到问题

2017-10-11 17:33:24 +08:00
 tihiro
想把一个字典类型的变量写入到文件中,并且保证字典的格式为看起来比较舒服的格式。
使用 python 版本 2.7.10
# encoding: utf-8
import json

def main():
a = {
'addr': '北京',
'type': 1,
'deleted': False,
'name': None,
}
dict = json.dumps(a, encoding='utf-8', ensure_ascii=False, indent=4)
with open('a.txt', 'a') as f:
f.write(dict)


if __name__ == '__main__':
main()

上面方法得到的结果
{
"deleted": false,
"type": 1,
"addr": "北京",
"name": null
}

怎样得到
{
"deleted": False,
"type": 1,
"addr": "北京",
"name": None
}
请问怎么得到这种格式的文件?

还试过另外一种方法如下:

def main():
a = {
'addr': '北京',
'type': 1,
'deleted': False,
'name': None,
}
with open('a.txt', 'a') as f:
f.write('a = ' + str(a))

结果如下:
a = {'deleted': False, 'type': 1, 'addr': '\xe5\x8c\x97\xe4\xba\xac', 'name': None}

它没有格式化输出结果,而且 unicode 字符串是\u 形式转义了的,可读性很差,请问有什么办法可以改进?
2342 次点击
所在节点    Python
8 条回复
gstqc
2017-10-11 18:01:16 +08:00
这是什么鬼……

1. None, False 是 dict
null, false 是 json

2. dict = json.dumps
为啥要用内置函数名做变量名,而且 json.dumps 后类型是 str,变量名是 dict

最后
要把字典写入数据
直接 f.write(str(a)) 就可以了
konia
2017-10-11 18:01:24 +08:00
```
{
"deleted": False,
"type": 1,
"addr": "北京",
"name": None
}
```

这种就不是合法的 json 格式吧。为啥要这么存。。。
tihiro
2017-10-11 18:06:51 +08:00
@gstqc 第一点,我知道的,目的是为了写入到文件中,后面直接把文件拿过来当字典使用
第二点,确实不应该这么用,抱歉,考虑不周。
最后直接 f.write(str(a)) 格式太丑了,而且 unicode 字符串是\u 形式转义了的。
azh7138m
2017-10-11 18:09:04 +08:00
可以用 pickle
这种问题叫做序列化:)
azh7138m
2017-10-11 18:10:21 +08:00
没看到还要舒服的格式:(
那用 xml 自己慢慢存?
lolizeppelin
2017-10-11 19:24:06 +08:00
存 json, 有参数让 json 格式变漂亮,有参数输出中文,自己找
linw1995
2017-10-11 20:46:24 +08:00
不是一般用 json 比较多吗?写入用 json.dump,读取用 json.load 就好了。若是数据量大用 pickle 序列化后存到文件里,或者把 json 格式写成 gzip 压缩的。
azurexie
2017-10-11 20:48:27 +08:00
中文转码建议用 codecs

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/396841

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX