Python字典写入文件的各种方式及效果
(百度搜了一大圈都没找到解决我自己问题的方法,可能因为我在字典里套了list吧
写入.json和.txt文件我感觉格式一样(暂且不区分了
我想要的效果是:字典的各个元素也就是每个键值对单独占一行
1. 普通字典写入文件
(不是一行一行的情况)
import json
dict = {"Alice":97,"Bob":98}
json_str = json.dumps(dict) #dumps
with open('test_data.txt', 'w') as f:
f.write(json_str)
效果在文件里面就是这样:
(一行一行写入的情况)
dict = {"Alice":97,"Bob":98}
with open('test_data.txt', 'w') as f:
json_str = json.dumps(dict,indent=0)
f.write(json_str)
f.write('\n')
多亏了indent这个参数:缩进的作用(但是如果value值是list的情况,换行会奇怪起来)
2.一键多值(值为一个list的文件)
(不分行和上面是一样的,如果按上面的方式分行的话)
dict = {"Alice":[97,98],"Bob":[87,99]}
with open('test_data.txt', 'w') as f:
json_str = json.dumps(dict,indent=0)
f.write(json_str)
f.write('\n')
效果是这样的,list也被分成一行一行的了,我也不知道为什么:
(有list的分行,结论确实没有什么参数和函数可以直接一行一行,只能手动字符串转换)
dict = {"Alice":[97,98],"Bob":[87,99]}
with open('test_data.txt', 'w') as f:
f.write('{')#这样子字典没有自动的大括号要自己加
for key in dict:
f.write('\n')
f.writelines('"' + str(key) + '": ' + str(dict[key]))
f.write('\n'+'}')
最终想要的效果来啦:
3.写入时open函数参数问题(追加/重写之类的)
‘r’:读
‘w’:写
‘a’:追加
‘r+’ == r+w(可读可写,文件若不存在就报错(IOError))
‘w+’ == w+r(可读可写,文件若不存在就创建)
‘a+’ ==a+r(可追加可写,文件若不存在就创建)
对应的,如果是二进制文件,就都加一个b就好啦:
‘rb’ ‘wb’ ‘ab’ ‘rb+’ ‘wb+’ ‘ab+’f.write(json_str+'\n') #加\n换行显示
4.中文编码问题
# 对中文编码处理,使得生成的json文件中中文能正常显示,而不是以Unicode码显示
final_json = json.dumps(df, sort_keys=True, indent=4, ensure_ascii=False)
with open(file_name, 'w') as fObj:
fObj.write(final_json)
5.df的两列转换成为字典的问题:
dataframe的两列来创建字典的问题,有两种情况:**
一种是列名为key 值为value
另一种是直接两列一列为key一列为value