Python字典写入文件的各种方式及效果

(百度搜了一大圈都没找到解决我自己问题的方法,可能因为我在字典里套了list
写入.json和.txt文件我感觉格式一样(暂且不区分了

我想要的效果是:字典的各个元素也就是每个键值对单独占一行

python向文件写入一行 python一行行写入文件_python向文件写入一行

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)

效果在文件里面就是这样:

python向文件写入一行 python一行行写入文件_写入文件_02

(一行一行写入的情况)
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的情况,换行会奇怪起来)

python向文件写入一行 python一行行写入文件_Python_03

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也被分成一行一行的了,我也不知道为什么:

python向文件写入一行 python一行行写入文件_json_04

(有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'+'}')

最终想要的效果来啦:

python向文件写入一行 python一行行写入文件_python向文件写入一行_05

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