Python中如何将字典写入文件?
想把一个字典类型的变量写入到文件中,并且保证字典的格式为看起来比较舒服的格式。
使用 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 形式转义了的,可读性很差,请问有什么办法可以改进?
Python中如何将字典写入文件?
这是什么鬼……
1. None, False 是 dict
null, false 是 json
2. dict = json.dumps
为啥要用内置函数名做变量名,而且 json.dumps 后类型是 str,变量名是 dict
最后
要把字典写入数据
直接 f.write(str(a)) 就可以了
import json
# 示例字典
data = {
"name": "张三",
"age": 25,
"skills": ["Python", "数据分析", "机器学习"],
"is_employed": True
}
# 方法1:使用json模块写入JSON文件(最常用)
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2) # ensure_ascii确保中文正常显示
# 方法2:写入文本格式(简单键值对)
with open('data.txt', 'w', encoding='utf-8') as f:
for key, value in data.items():
f.write(f"{key}: {value}\n")
# 方法3:使用pickle保存Python对象(保留数据类型)
import pickle
with open('data.pkl', 'wb') as f:
pickle.dump(data, f)
# 读取验证
with open('data.json', 'r', encoding='utf-8') as f:
loaded_data = json.load(f)
print("从JSON文件读取的数据:", loaded_data)
核心要点:
- JSON格式:用
json.dump()写入,json.load()读取,适合跨语言数据交换 - 文本格式:直接遍历字典写入,可读性好但结构简单
- Pickle格式:用
pickle.dump()保存完整Python对象,但仅限Python使用
一句话建议:日常用JSON,要保留Python特性用Pickle,简单记录用文本。
<br>{ <br>"deleted": False, <br>"type": 1, <br>"addr": "北京", <br>"name": None <br>} <br>
这种就不是合法的 json 格式吧。为啥要这么存。。。
第一点,我知道的,目的是为了写入到文件中,后面直接把文件拿过来当字典使用
第二点,确实不应该这么用,抱歉,考虑不周。
最后直接 f.write(str(a)) 格式太丑了,而且 unicode 字符串是\u 形式转义了的。
没看到还要舒服的格式:(
那用 xml 自己慢慢存?
存 json, 有参数让 json 格式变漂亮,有参数输出中文,自己找
不是一般用 json 比较多吗?写入用 json.dump,读取用 json.load 就好了。若是数据量大用 pickle 序列化后存到文件里,或者把 json 格式写成 gzip 压缩的。
中文转码建议用 codecs


