环境小硕的转行之路-12-序列化和反序列化模块的引用

Posted negu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了环境小硕的转行之路-12-序列化和反序列化模块的引用相关的知识,希望对你有一定的参考价值。

利用json和pickle模块序列化代码


序列化定义:把内存的数据对象变成字符串了

序列化


def sayhi(name):
    print(‘hello‘,name)
info = 
    ‘name‘:‘negu‘,
    ‘age‘:22
    # ‘func‘:sayhi()

‘‘‘法1‘‘‘
f = open(‘test.text‘,‘w‘)
f.write(str(info))
f.close()
‘‘‘法2‘‘‘
import json#只能处理简单的数据类型:str、list、dict。所以函数不行。主要用于不同语言之间进行数据交互(例如python和java的类不同就不能交换,所以只能简单)。
f = open(‘test.text‘,‘w‘)
f.write(json.dumps(info))
print(json.dumps(info))#输出<class ‘str‘> "name": "negu", "age": 22
f.close()
‘‘‘法3‘‘‘
import pickle#和json类似,但有自己的一套语法规则。这样写打开text文件乱码。
f = open(‘test.text‘,‘wb‘)#需要以二进制读取模式打开它
f.write(pickle.dumps(info))#输出一堆二进制数
print(pickle.dumps(info))
f.close()
#pickle可以传入函数,但是在反序列化的文件中必须定义此函数。可以在反序列化文件中改变函数内容,反序列化后的代码跟着改变。

 

反序列化


‘‘‘法2对应‘‘‘
import  json
f = open(‘test.text‘,‘r‘)
data = json.loads(f.read())#read函数:从文件开头读到结尾
print(data[‘age‘])#输出22
‘‘‘法3对应‘‘‘
    import  pickle
def sayhi(name):
    return print(‘hello2‘,name)#此时执行sayhi 输出hello2
f = open(‘test.text‘,‘rb‘)
data = pickle.load(f)#data = pickle.loads(f.read())可以相互替换json模块同理。
print(data[‘age‘],data[‘func‘](‘negu‘))

 

不同文件之间自建模块的引用


import os
import sys

print(1,__file__)#获取当前文件的路径(pycharm自作主张加的),在终端设备上只会显示文件名.
print(2,os.__file__)#os模块储存的路径
#os.path.abspath()函数:获取文件的绝对路径
#os.path.dir()函数:获取文件的上一级路径
os.path.dirname(os.path.dirname(os.path.abspath(__file__))))#当前程序返回两级目录
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(base_dir)#sys.path 返回的是一个列表,此列表包含了已经添加到系统的环境变量了,当我们要添加自己的搜索目录时,可以通过列表的append()方法。
import day1,day2,day3
from day1 import login
login

 

以上是关于环境小硕的转行之路-12-序列化和反序列化模块的引用的主要内容,如果未能解决你的问题,请参考以下文章

环境小硕的转行之路-23-异常处理

环境小硕的转化之路-17-内置函数拾遗

python学习day4之路文件的序列化和反序列化

LeetCode 449 序列化和反序列化二叉搜索树[二叉树 序列化 前序 中序 后序] HERODING的LeetCode之路

Python 解析模块 异常模块 响应模块 序列化和反序列化组件

Python库:序列化和反序列化模块pickle介绍