pickle

Python中if __name__=="__main__" 语句在调用多进程Process过程中的作用分析

青春壹個敷衍的年華 提交于 2020-04-29 10:23:34
2018年2月27日 于创B515    引言   最近准备学习一下如何使用Python中的多进程。在翻看相关书籍、网上资料时发现所有代码都含有if __name__=="__main__",在实验的过程中发现如果在运行代码过程中,没有这句话Python解释器就会报错。虽然Python对于multiprocessing的文档第17.2.1.1节中 【1】 提到必须如此使用,但是我觉得并没有根本上解释清楚。因此我决定从源码来解释我的疑惑。 # 代码0.1错误代码 import multiprocessing as mp import os def do(): print ( " pid is : %s ... " % os.getpid()) print ( " parent id is : %s ... " % os.getpid()) p = mp.Process(target=do, args= ()) p.start() # 代码0.2正确代码 import multiprocessing as mp import os def do(): print ( " pid is : %s ... " % os.getpid()) if __name__ == ' __main__ ' : print ( " parent id is : %s ... " % os.getpid(

python 学习二十五天(python内置模块之序列化模块)

[亡魂溺海] 提交于 2020-04-29 10:22:48
今日主要内容 1.python内置模块-序列化模块 python中的序列化模块 json 所有的编程语言都通用的序列化格式....它支持的数据类型非常有限 数字 字符串 列表 字典 pickle 只能在python语言的程序之间传递数据用的..pickle支持python中所有的数据类型 shelve python3.* 之后才有的 2.摘要模块---hashlib 3.一道经典面试题 第一.python内置模块---序列化 ***所有的导入模块都需要把import放在文件首位 什么叫序列化 能存储在文件中的一定是字符串 或者是 字节 能在网络上传输的 只有字节 所以为了能够对我们需要的数据进行存储或者传输就需要对数据进行序列化 以前是怎样序列化的呢? dic = {"大表哥":(190,90)} dic --> 字符串 # 序列化 字符串 --> dic # 反序列化 由此可知: 序列化 等于创造一个序列,就是创造一个字符串 实例化 等于创建一个实例 如何使用json #讲解标准序列化的操作 1.json import json 例:dumps和loads #序列化 import json dic = { ' 小样 ' :(190,90, ' 捏脚 ' )} ret = json.dumps(dic) ret1 = json.dumps(dic,ensure_ascii=

Python Json & Pickle模块

可紊 提交于 2020-04-29 10:21:29
用于序列化的两个模块 Json,用于字符串 和 python数据类型间进行转换 Pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps、dump、loads、load Pickle模块提供了四个功能:dumps、dump、loads、load Json 将数据通过特殊的形式转换为所有程序语言都认识的字符串 Python 原始类型向 Json 类型转换表 Python Json dict object list, tuple array str, unicose string int, long, float number Ture ture False false None null Json dump & dumps : import json info = { ' name ' : ' dbf- ' , ' age ' : 18 } with open( ' test ' , ' w ' )as f: print (json.dumps(info), ' is the result ' ) f.write(json.dumps(info)) # 写入Json文件 json.dump(info, f)=f.write(json.dumps(info)) # dumps序列化一次load反序列化一次 输出结果: {

python序列化对象和反序列化

瘦欲@ 提交于 2020-04-29 09:37:25
1.首先不管哪种语言都会用到序列化和反序列化的过程, 2.序列化:把对象转换为字节序列的过程称为对象的序列化; 反序列化:把对象转换为字节序列的过程称为对象的序列化。 3.序列化的作用:把对象(变量)从内存中变成可存储或传输的二进制对象,序列化之后的内容就可以写入磁盘,或者通过网络传输到别的机器上,同理,反序列化实现,把变量内容从序列化的对象重新读取到内存 4.如何实现序列化?比如我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,例如xml,json。 json是标准的JavaScript语言的对象,其实就是字符串,可以被所有语言读取,也可以方便的存储到磁盘或者网络传输。 5.JSON和Python的关系?两者内置的数据类型对应关系如下 6.在python中json只能转换一部分对象。类,函数无法转换,就要用到pickle,但pickle只适用在python内部适用,shelve模块也是python内部使用 举例说明 1.想要把一个列表写进文件 import json mq =[1, ' e ' , ' r ' , ' m ' ,4 ] with open( ' json_te ' , ' w ' ) as fm: json.dump(mq,fm) 如下,不调用dumps序列化,则直接报错,write()的参数必须是str类型 import json mq=[1,

python:序列化与反序列化(json、pickle、shelve)

删除回忆录丶 提交于 2020-04-29 08:25:31
本节内容 前言 json模块 pickle模块 shelve模块 总结 一、前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Python也是一样。很多时候我们会有这样的需求: 把内存中的各种数据类型的数据通过网络传送给其它机器或客户端; 把内存中的各种数据类型的数据保存到本地磁盘持久化; 2.数据格式 如果要将一个系统内的数据通过网络传输给其它系统或客户端,我们通常都需要先把这些数据转化为字符串或字节串,而且需要规定一种统一的数据格式才能让数据接收端正确解析并理解这些数据的含义。 XML 是早期被广泛使用的数据交换格式,在早期的系统集成论文中经常可以看到它的身影;如今大家使用更多的数据交换格式是 JSON(JavaScript Object Notation) ,它是一种轻量级的数据交换格式。JSON相对于XML而言,更加加单、易于阅读和编写,同时也易于机器解析和生成。除此之外,我们也可以自定义内部使用的数据交换格式。 如果是想把数据持久化到本地磁盘,这部分数据通常只是供系统内部使用,因此数据转换协议以及转换后的数据格式也就不要求是标准、统一的,只要本系统内部能够正确识别即可。但是,系统内部的转换协议通常会随着编程语言版本的升级而发生变化(改进算法、提高效率),因此通常会涉及转换协议与编程语言的版本兼容问题

Python内置库:json和pickle(数据序列化)

瘦欲@ 提交于 2020-04-29 08:25:01
Python中的json模块和pickle都是用于数据的序列化和反序列化,它们提供的方法也是一样的:dumps,dump,loads,load dumps(obj): 将对象 序列化 为str。 dump(obj, fp): 将对象 序列化 为str,并存入文件中。 loads(s): 将(序列化后的)字符串 反序列化 为Python对象。 load(fp): 将文件中的(序列化后的)字符串 反序列化 为Python对象。 json和pickle模块虽然都是用于数据的序列化和反序列化,但它们之间还是有许多 区别 的,或者说各有各的 优点和缺点 : 通用性: json序列化后的字符串是通用的格式(普通的字符串)在不同的平台和语言都可以识别,而pickle序列化后的字符串只有Python可以识别(Python专用序列化模块) 处理的数据类型: json能序列化的对象只是Python中基础数据类型,而pickle能序列化Python中所有的数据类型。 处理后的数据类型: json序列化后的字符串是文本类型(记事本打开文件后或者print打印后,你也能看懂其中的内容),而pickle序列化后的字符串是二进制流数据(记事本打开后或者print打印后就完全看不懂里面的内容了)。所以在进行文件操作时注意使用的是哪个模块,是否需要以b的格式打开。 使用空间: json需要的存储空间较小

Python中关于序列化的讨论,以及dump、dumps和load、loads区别的对比

点点圈 提交于 2020-04-29 08:24:06
序列化 序列化:pickle模块 json模块 shelve模块 一.pickle模块 1.pickle模块 1)可以将对象转换为一种可以传输或存储的格式。 2)pickle模块将任意一个python对象换成一个系统字节的操作过程叫做串行化对象。 3)pickle模块实现了python的所有数据序列化和反序列化。它不是用于多种语言间的传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的。 import pickle #序列化----将数据存储只文件中 info = {"Name:":"XiaoMing","Age:":22} data_info = open("a.pkl","wb") pickle.dump(info,data_info) data_info.close() #反序化---将文件读取出来并反序列化 data_out =open('a.pkl','rb') a=pickle.load(data_out) print(a) 2.dump和dumps的区别: dump是将对象序列化并保存到文件中 dumps是将对象序列化 3.load和loads的区别: load将序列化字符串从文件读取并反序列化 loads将序列化字符串反序列化 执行代码:data1 = [1,2,'a',3,'b'] pi = pickle.dumps(data1)

python 模块

落花浮王杯 提交于 2020-04-29 08:23:35
1,引入 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval就不管用了,所以eval的重点还是通常用来执行一个字符串表达式,并返回表达式的值。 import json x = " [nuaa,true,dalse,1] " # print(eval(x)) # 报错,无法解析null类型,而json就可以 print (json.dumps(x)) # "[nuaa,true,dalse,1]" 2,什么时序列化? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。 3,为什么要序列化? 1:持久保存状态 需知一个软件/程序的执行就在处理一系列状态的变化,在编程语言中,'状态'会以各种各样有结构的数据类型(也可简单的理解为变量)的形式被保存在内存中。 内存是无法永久保存数据的,当程序运行了一段时间,我们断电或者重启程序,内存中关于这个程序的之前一段时间的数据(有结构)都被清空了。 在断电或重启程序之前将程序当前内存中所有的数据都保存下来(保存到文件中)

Python -- 使用pickle 和 CPickle对数据对象进行归档和解析

生来就可爱ヽ(ⅴ<●) 提交于 2020-04-29 08:23:18
经常遇到在Python程序运行中得到了一些字符串、列表、字典、对象等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据。 这个时候Pickle模块就派上用场了,它可以将对象转换为一种可以传输或存储的格式。 使用Pickle给对象归档: import pickle class Student( object ): def __init__(self): self.name = '' self.age = '' if __name__ == ' __main__ ' : stu = Student() stu.name = ' zhouxi ' stu.age = 18 pklPath = ' a.pkl ' with open(pklPath, ' w ' ) as f: pickleString = pickle.dump(stu, f) 运行会生成一个a.pkl文件, stu实例就归档在这个文件中了 使用Pickle进行解档 import pickle class Student( object ): def __init__(self): self.name = '' self.age = '' if __name__ == ' __main__ ' : stu = Student() pklPath = ' a.pkl ' with open

编写自定义类实现json和pickle文件的多行写入,多行读取

夙愿已清 提交于 2020-04-29 04:15:35
json与pickle 序列化(serialization):将内存中的结构化数据转换成字节串。 反序列化(deserialization):从文件中或网络中获取的数据转换成内存中原来的数据类型 具体方法:dump、dumps、load、loads dump与load是对文件进行操作(序列化与反序列化) dumps与loads时对内存中的数据进行操作(序列化与反序列化) pickle 写入多个对象,读取多个对象 pickle支持多次dump,但对于读取文件,我们再不清楚内容(load多少次)时,使用try except EOFError class A: def __init__(self): self.li = [] class B: def __init__(self): self.li = [] a = A() a.li.append(1) b = B() b.li.append(2) import pickle class My_pickle(): def __init__(self,path): self.path = path def dump(self,*args): with open(self.path,mode='wb') as f: for i in args: pickle.dump(i,f) def load(self): with open(self