标签:with open 输出 传输 port erro 数据类型 换行 前端 你好
一. 序列化模块json
把其他的数据类型 转换成 字符串 bytes 是序列化的过程
能存在文件和在网上传输的只能是bytes, 所以要转化成字符串
json模块只支持字符串, 字典(key不能是数字, 数字会变成字符串), 列表, 数字
json的对象不能含有元组, 集合, 字典的键不能是数字, 键如果是元组会直接报错
文件中读出来的, 网络上接收来的不能直接运行, 会有恶意代码
json在所有的语言之间都通用, 包括后端语言 java c c++ c# 和前端语言
json能够处理的数据类型非常有限
dic = {‘key‘ : ‘value‘,‘key2‘ : ‘value2‘} import json ret = json.dumps(dic) # 序列化 print(ret) res = json.loads(ret) # 反序列化 print(res) 向文件中记录字典 import json dic = {‘key‘ : ‘value‘,‘key2‘ : ‘value2‘} ret = json.dumps(dic) with open(‘json_file‘,‘a‘) as f: f.write(ret) 从文件中读取字典 with open(‘json_file‘,‘r‘) as f: str_dic = f.read() dic = json.loads(str_dic) print(dic.items()) dump load 是直接操作文件的 dic = {‘key1‘ : ‘value1‘,‘key2‘ : ‘value2‘} with open(‘json_file‘,‘a‘) as f: json.dump(dic,f) with open(‘json_file‘,‘r‘) as f: dic = json.load(f) print(dic.items()) json不支持连续存取, 需要一个个加上换行符放进文件中, 再一个个地取出来 dic = {‘key1‘ : ‘value1‘,‘key2‘ : ‘value2‘} with open(‘json_file‘,‘a‘) as f: str_dic = json.dumps(dic) f.write(str_dic+‘\n‘) str_dic = json.dumps(dic) f.write(str_dic + ‘\n‘) str_dic = json.dumps(dic) f.write(str_dic + ‘\n‘) with open(‘json_file‘,‘r‘) as f: for line in f: dic = json.loads(line.strip()) print(dic.keys()) dumps loads 在内存中做数据转换 : dumps 数据类型 转成 字符串 序列化 loads 字符串 转成 数据类型 反序列化 dump load 直接将数据类型写入文件,直接从文件中读出数据类型 dump 数据类型 写入 文件 序列化 load 文件 读出 数据类型 反序列化 dic = {‘key‘:‘你好‘} print(json.dumps(dic,ensure_ascii=False)) # 没有ensure_ascii会输出{"key": "\u4f60\u597d"} import json data = {‘username‘:[‘李华‘,‘二愣子‘],‘sex‘:‘male‘,‘age‘:16} json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(‘,‘,‘:‘),ensure_ascii=False) # 按键排列, 按,和:换行, 换行时空4个空格 print(json_dic2)
二. 序列化模块pickle
支持在python中几乎所有的数据类型
只能在python中使用, dumps 序列化的结果只能是字节, 而且不是utf-8或者unicode等格式的字节, 只有Python能解码
在和文件操作的时候,需要用rb wb的模式打开文件
可以多次dump和多次load
import pickle dic = {(1,2,3):{‘a‘,‘b‘},1:‘abc‘} ret = pickle.dumps(dic) print(ret) print(pickle.loads(ret)) dump with open(‘pickle_file‘,‘wb‘) as f: pickle.dump(dic,f) load with open(‘pickle_file‘,‘rb‘) as f: ret = pickle.load(f) print(ret,type(ret)) dic = {(1,2,3):{‘a‘,‘b‘},1:‘abc‘} dic1 = {(1,2,3):{‘a‘,‘b‘},2:‘abc‘} dic2 = {(1,2,3):{‘a‘,‘b‘},3:‘abc‘} dic3 = {(1,2,3):{‘a‘,‘b‘},4:‘abc‘} with open(‘pickle_file‘,‘wb‘) as f: pickle.dump(dic, f) pickle.dump(dic1, f) pickle.dump(dic2, f) pickle.dump(dic3, f) with open(‘pickle_file‘,‘rb‘) as f: ret = pickle.load(f) print(ret) ret = pickle.load(f) print(ret) ret = pickle.load(f) print(ret) ret = pickle.load(f) print(ret) with open(‘pickle_file‘,‘rb‘) as f: while True: try: ret = pickle.load(f) print(ret,type(ret)) except EOFError: # 报错时, 用except break
标签:with open 输出 传输 port erro 数据类型 换行 前端 你好
原文地址:https://www.cnblogs.com/NachoLau/p/9513546.html