相关笔记的jupiter运行代码已经上传,请在资源中自行下载。
'''
os.__file__
__file__:用于显示当前文件所在的绝对路径
import os
xxx-cpython-35.pyc 表示c语言编写的Python编译器3.5版本的字节码
import Name
from name import defName,defName2
from name import * 注意:这里尽量不要使用这种方法导入;
使用这种方式导入,若存在同名函数,后导入的函数会覆盖先导入的函数
import Name as sName
__name__属性
在模块被调用时不希望调用模块中的某些功能可是使用"__name__"属性来实现
例子:
if __name__ == '__main__':
print('在本体模块内被调用')
else:
print('在其他模块内被调用')
例子结束
__all__属性
在模块被导入时的所有方法名
所有在模块被调用的方法名都存在__all__[]中
__all__属性的功能还可用dir([x])来实现
dir()函数会罗列当前定义的所有名称
并不是所有模块都有"__all__"属性
程序执行时导入模块路径:
import sys
sys.path.append('/home/itcast/xxx')
# 末尾追加路径
sys.path.insert(0, '/home/itcast/xxx')
#头部添加路径(可以确保先搜索这个路径)
'''
# 程序执行时添加路径 例子
import sys
raw_list = sys.path
sys.path.append('D:\\Documents\\Jupyter_notebook')
append_list = sys.path
sys.path.insert(0, 'D:\\Documents')
insert_list = sys.path
print('raw_list = {}\n\nappend_list = {}\n\ninsert_list = {}'.format(
raw_list,append_list,insert_list
))
raw_list = ['D:\\Documents', '', 'D:\\Documents\\Jupyter_notebook', 'C:\\MyPrograms\\Anaconda3\\python37.zip', 'C:\\MyPrograms\\Anaconda3\\DLLs', 'C:\\MyPrograms\\Anaconda3\\lib', 'C:\\MyPrograms\\Anaconda3', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages\\win32', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages\\win32\\lib', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages\\Pythonwin', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\shj\\.ipython', 'D:\\Documents\\Jupyter_notebook']
append_list = ['D:\\Documents', '', 'D:\\Documents\\Jupyter_notebook', 'C:\\MyPrograms\\Anaconda3\\python37.zip', 'C:\\MyPrograms\\Anaconda3\\DLLs', 'C:\\MyPrograms\\Anaconda3\\lib', 'C:\\MyPrograms\\Anaconda3', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages\\win32', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages\\win32\\lib', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages\\Pythonwin', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\shj\\.ipython', 'D:\\Documents\\Jupyter_notebook']
insert_list = ['D:\\Documents', '', 'D:\\Documents\\Jupyter_notebook', 'C:\\MyPrograms\\Anaconda3\\python37.zip', 'C:\\MyPrograms\\Anaconda3\\DLLs', 'C:\\MyPrograms\\Anaconda3\\lib', 'C:\\MyPrograms\\Anaconda3', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages\\win32', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages\\win32\\lib', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages\\Pythonwin', 'C:\\MyPrograms\\Anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\shj\\.ipython', 'D:\\Documents\\Jupyter_notebook']
# __all__和dir() 比较例子
print('this is a example for __all_ and dir()')
import os
A=os.__all__
B=dir(os)
print('this is __all__:',A)
print('\n***\n'*2)
print('this is dir(): ',A)
print('\n***\n'*2)
C=list(set(A).difference(set(B)))
print('this is difference of __all__ and dir()', C)
this is a example for __all_ and dir()
this is __all__: ['altsep', 'curdir', 'pardir', 'sep', 'pathsep', 'linesep', 'defpath', 'name', 'path', 'devnull', 'SEEK_SET', 'SEEK_CUR', 'SEEK_END', 'fsencode', 'fsdecode', 'get_exec_path', 'fdopen', 'popen', 'extsep', '_exit', 'DirEntry', 'F_OK', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'R_OK', 'TMP_MAX', 'W_OK', 'X_OK', 'abort', 'access', 'chdir', 'chmod', 'close', 'closerange', 'cpu_count', 'device_encoding', 'dup', 'dup2', 'environ', 'error', 'execv', 'execve', 'fspath', 'fstat', 'fsync', 'ftruncate', 'get_handle_inheritable', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getlogin', 'getpid', 'getppid', 'isatty', 'kill', 'link', 'listdir', 'lseek', 'lstat', 'mkdir', 'open', 'pipe', 'putenv', 'read', 'readlink', 'remove', 'rename', 'replace', 'rmdir', 'scandir', 'set_handle_inheritable', 'set_inheritable', 'spawnv', 'spawnve', 'startfile', 'stat', 'stat_result', 'statvfs_result', 'strerror', 'symlink', 'system', 'terminal_size', 'times', 'times_result', 'truncate', 'umask', 'uname_result', 'unlink', 'urandom', 'utime', 'waitpid', 'write', 'makedirs', 'removedirs', 'renames', 'walk', 'execl', 'execle', 'execlp', 'execlpe', 'execvp', 'execvpe', 'getenv', 'supports_bytes_environ', 'spawnl', 'spawnle']
***
***
this is dir(): ['altsep', 'curdir', 'pardir', 'sep', 'pathsep', 'linesep', 'defpath', 'name', 'path', 'devnull', 'SEEK_SET', 'SEEK_CUR', 'SEEK_END', 'fsencode', 'fsdecode', 'get_exec_path', 'fdopen', 'popen', 'extsep', '_exit', 'DirEntry', 'F_OK', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'R_OK', 'TMP_MAX', 'W_OK', 'X_OK', 'abort', 'access', 'chdir', 'chmod', 'close', 'closerange', 'cpu_count', 'device_encoding', 'dup', 'dup2', 'environ', 'error', 'execv', 'execve', 'fspath', 'fstat', 'fsync', 'ftruncate', 'get_handle_inheritable', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getlogin', 'getpid', 'getppid', 'isatty', 'kill', 'link', 'listdir', 'lseek', 'lstat', 'mkdir', 'open', 'pipe', 'putenv', 'read', 'readlink', 'remove', 'rename', 'replace', 'rmdir', 'scandir', 'set_handle_inheritable', 'set_inheritable', 'spawnv', 'spawnve', 'startfile', 'stat', 'stat_result', 'statvfs_result', 'strerror', 'symlink', 'system', 'terminal_size', 'times', 'times_result', 'truncate', 'umask', 'uname_result', 'unlink', 'urandom', 'utime', 'waitpid', 'write', 'makedirs', 'removedirs', 'renames', 'walk', 'execl', 'execle', 'execlp', 'execlpe', 'execvp', 'execvpe', 'getenv', 'supports_bytes_environ', 'spawnl', 'spawnle']
***
***
this is difference of __all__ and dir() []
#dir() 例子
dir()
['In',
'Out',
'_',
'__',
'___',
'__builtin__',
'__builtins__',
'__doc__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'_dh',
'_i',
'_i1',
'_i10',
'_i11',
'_i12',
'_i13',
'_i14',
'_i15',
'_i16',
'_i17',
'_i18',
'_i19',
'_i2',
'_i20',
'_i3',
'_i4',
'_i5',
'_i6',
'_i7',
'_i8',
'_i9',
'_ih',
'_ii',
'_iii',
'_oh',
'a',
'add',
'alist',
'astring',
'exit',
'get_ipython',
'i',
'is_odd',
'l',
'newlist',
'numlist',
'produce',
'quit',
'reduce',
'sort_list',
'sorted_str',
'sum']
'''
os.access(path,mode)
检查权限;path:路径;mode{
os.F_OK: 作为access()的mode参数,测试path是否存在。最常用
os.R_OK: 包含在access()的mode参数中 , 测试path是否可读。
os.W_OK 包含在access()的mode参数中 , 测试path是否可写。
os.X_OK 包含在access()的mode参数中 ,测试path是否可执行。
}
os.chdir(path) 改变当前工作目录
os.chmod(path,mode) 更改权限
os.chown(path, uid, gid) 更改文件所有者
os.chroot(path) 改变当前进程的根目录
os.path.realpath(__file__) 返回真实路径
os.path.split() 返回路径的目录和文件名
os.getcwd() 得到当前工作的目录
__file__ 是用来获得模块所在的路径的
更多参照下方的help
'''
import os
dir(os)
['DirEntry',
'F_OK',
'MutableMapping',
'O_APPEND',
'O_BINARY',
'O_CREAT',
'O_EXCL',
'O_NOINHERIT',
'O_RANDOM',
'O_RDONLY',
'O_RDWR',
'O_SEQUENTIAL',
'O_SHORT_LIVED',
'O_TEMPORARY',
'O_TEXT',
'O_TRUNC',
'O_WRONLY',
'P_DETACH',
'P_NOWAIT',
'P_NOWAITO',
'P_OVERLAY',
'P_WAIT',
'PathLike',
'R_OK',
'SEEK_CUR',
'SEEK_END',
'SEEK_SET',
'TMP_MAX',
'W_OK',
'X_OK',
'_Environ',
'__all__',
'__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'_execvpe',
'_exists',
'_exit',
'_fspath',
'_get_exports_list',
'_putenv',
'_unsetenv',
'_wrap_close',
'abc',
'abort',
'access',
'altsep',
'chdir',
'chmod',
'close',
'closerange',
'cpu_count',
'curdir',
'defpath',
'device_encoding',
'devnull',
'dup',
'dup2',
'environ',
'error',
'execl',
'execle',
'execlp',
'execlpe',
'execv',
'execve',
'execvp',
'execvpe',
'extsep',
'fdopen',
'fsdecode',
'fsencode',
'fspath',
'fstat',
'fsync',
'ftruncate',
'get_exec_path',
'get_handle_inheritable',
'get_inheritable',
'get_terminal_size',
'getcwd',
'getcwdb',
'getenv',
'getlogin',
'getpid',
'getppid',
'isatty',
'kill',
'linesep',
'link',
'listdir',
'lseek',
'lstat',
'makedirs',
'mkdir',
'name',
'open',
'pardir',
'path',
'pathsep',
'pipe',
'popen',
'putenv',
'read',
'readlink',
'remove',
'removedirs',
'rename',
'renames',
'replace',
'rmdir',
'scandir',
'sep',
'set_handle_inheritable',
'set_inheritable',
'spawnl',
'spawnle',
'spawnv',
'spawnve',
'st',
'startfile',
'stat',
'stat_result',
'statvfs_result',
'strerror',
'supports_bytes_environ',
'supports_dir_fd',
'supports_effective_ids',
'supports_fd',
'supports_follow_symlinks',
'symlink',
'sys',
'system',
'terminal_size',
'times',
'times_result',
'truncate',
'umask',
'uname_result',
'unlink',
'urandom',
'utime',
'waitpid',
'walk',
'write']
用于生成hash(哈希)码等操作
参考于python高级
hashlib.new(name[, data])
对数据进行加密参数:name:加密算法名,例如:‘md5’,[, data]要加密的数据
hash.digest() 返回二进制数据字符串的摘要
hash.hexdigest() 返回16进制数据字符串的摘要
hash.digest_size hash对象的字节长度
hash.block_size hash对象的内部块大小
hash.name hash对象的名称
hash.update(data) 传递类字节参数(通常是bytes)更新hash对象。
重复调用update()等同于单次的拼接调用:m.update(a); m.update(b)等同m.update(a+b)
hash.copy() 返回hash对象的克隆这里hash指的是经过加密算法加密后的摘要
hashlib.algorithms_guaranteed 所有平台的hashlib模块都支持的hash算法的名称集合。
hashlib.algorithms_available 当前运行的python解释器支持的hash算法的名称集合hashlib.algorithms_guaranteed的结果集总是hashlib.algorithms_available结果集的子集
简单的加密算法可能通过“撞库”破解,这时可以通过附加key来加强安全性
首先设定key,这个key最好是动态的,并且不能泄露,不然安全性会降低
然后设定加密算法md5 = hashlib.md5(key)
这里的key指的是自定义的key值
再通过res = md5.update(data)
来对data数据进行加密
最后通过res.hexdigest()
输出密文
# hashlib.new()使用例子
import hashlib
tmp = "PHP是世界上最好的语言".encode("utf-8")
result = hashlib.new('sha1', tmp)
print("二进制摘要:",result.digest())
print("16进制摘要:",result.hexdigest())
print("result摘要的字节长度:",result.digest_size)
print("result摘要的内部块大小:", result.block_size)
print("result对象的内部名(也可看做加密算法名):",result.name)
二进制摘要: b'\xc1W:\xb5VF=\xed\xb7\x8f\xfa\x1c\xe5\xe2\x11\x93\xc4ND8'
16进制摘要: c1573ab556463dedb78ffa1ce5e21193c44e4438
result摘要的字节长度: 20
result摘要的内部块大小: 64
result对象的内部名: sha1
# 高级加密(附加key)
key = "您说的对".encode("utf-8")
print(key)
sha1 = hashlib.sha1(key)
pa = sha1.update(tmp)
pb = sha1.hexdigest()
print("未添加key加密后的密文:",result.hexdigest())
print("高级加密后的密文:", pb)
b'\xe6\x82\xa8\xe8\xaf\xb4\xe7\x9a\x84\xe5\xaf\xb9'
未添加key加密后的密文: c1573ab556463dedb78ffa1ce5e21193c44e4438
高级加密后的密文: af672023437b22c31233917c74b489c9c2ede424
# hash.update()例子
# 分段加密的最终密文和不分段单次加密后的密文是相同的
sha1 = hashlib.sha1() # 选定算法
sha1.update(tmp) # 加密第一段
pa_res = sha1.hexdigest()
print("分段加密第一段密文:", pa_res)
sha1.update(key) # 加密第二段
pb_res = sha1.hexdigest()
print("分段加密第二段密文:", pb_res)
sha1 = hashlib.sha1() # 复位算法,尤其重要,否则后面的总段会认为是第三分段,而不是总段
sha1.update(tmp+key) # 加密总段
pc_res = sha1.hexdigest()
print("不分段加密后的密文:", pc_res)
print("第一分段字节编码:", tmp,'\n',"第二分段字节编码",key,'\n',"总段字节编码:",tmp+key) # 打印第一段,第二段,总段的字节编码
分段加密第一段密文: c1573ab556463dedb78ffa1ce5e21193c44e4438
分段加密第二段密文: 5e9d37c4e41b5abdf8fe3f52b22c435622682c60
不分段加密后的密文: 5e9d37c4e41b5abdf8fe3f52b22c435622682c60
第一分段字节编码: b'PHP\xe6\x98\xaf\xe4\xb8\x96\xe7\x95\x8c\xe4\xb8\x8a\xe6\x9c\x80\xe5\xa5\xbd\xe7\x9a\x84\xe8\xaf\xad\xe8\xa8\x80'
第二分段字节编码 b'\xe6\x82\xa8\xe8\xaf\xb4\xe7\x9a\x84\xe5\xaf\xb9'
总段字节编码: b'PHP\xe6\x98\xaf\xe4\xb8\x96\xe7\x95\x8c\xe4\xb8\x8a\xe6\x9c\x80\xe5\xa5\xbd\xe7\x9a\x84\xe8\xaf\xad\xe8\xa8\x80\xe6\x82\xa8\xe8\xaf\xb4\xe7\x9a\x84\xe5\xaf\xb9'
官方网址:
https://docs.python.org/3.7/library/
builtins 内建函数默认加载
os 操作系统接口
sys python自身的运行环境
functools 常用的工具
json 编码和解码JSON对象
logging 记录日志,调试
multiprocessing 多进程
threading 多线程
copy 拷贝
time 时间
time 模块参考网址:https://finthon.com/python-time/
datetime 日期和时间
calendar 日历
hashlib 哈希加密算法
random 随机数
re 正则
socket 标准BSD Sockets API
shutil 文件和目录管理(和os模块互补)
glob 基于文件通配符搜索
'''
深拷贝、浅拷贝
这里的深浅指的是拷贝的程度
浅拷贝:只是对同一个变量的地址引用(地址的拷贝),这里的拷贝只是用引用指向
深拷贝:这里需要导入模块【import copy ;new = copy.deepcopy(old)】这里的拷贝是新建了内存的拷贝
copy模块中的copy和deepcopy的区别:copy只copy第一层,而deepcopy是完全copy
copy拷贝的特点:自动判断>>>当copy的对象是不可变类型时,浅拷贝,当是可变类型时,copy第一层
'''
'''
这个模块中放置相对常用的一些方法
partial()(偏函数):把一个函数的某些参数设置成默认值,返回一个新的函数,
调用这个新的函数更简单
'''
# 例子
import functools
def test(*args, **kwargs):
#注意这里的可变长参数,如果设置定长参数,会出现参数多给报错
print('the args in test is:',args)
print('the kwargs in test is: ', kwargs)
q = functools.partial(test, 1,2)
q()
q(666, 2333)
the args in test is: (1, 2)
the kwargs in test is: {}
the args in test is: (1, 2, 666, 2333)
the kwargs in test is: {}
'''
requests 使用urllib3,继承了urllib2的所有特性
urllib 基于http的高层库
scrapy 爬虫
beautifulsoup4 HTML/XML的解析器
celery 分布式任务调度模块
redis 缓存
Pillow(PIL) 图像处理
xlsxwriter 仅写excle功能,支持xlsx
xlwt 仅写excel功能,支持xls,2013或更早版office
xlrd 只读excle功能
elasticsearch 全文搜索引擎
pymysql MySQL链接库
mongoengine/pymongo mongodbpython接口
matplotlib 画图
numpy/scipy 科学计算
django/tornado/flask web框架
SimpleHTTPServer 简单HTTPServer,不使用Web框架
gevent 基于协程的Python网络库
fabric 系统管理
pandas 数据处理库
scikit-learn 机器学习库
'''
'''
在一个文件夹下有py文件,有__init__.py文件称为包
包中__init__.py文件的内容应含有__all__,以及
from . import xxxName : 这里是对from * (all)以及 import 的导包方法的使用声明
如果__init__文件为空,导包会失败
模块重新导入
向导入模块中添加新的路径:sys.path.append("yourPath")
重新导入模块
from ModelName import *
reload("old_Model") # 这里的参数是要重新导入的模块
模块的循环导入问题
a模块中导入了b模块,然而在b模块中又导入了a模块(这样就出现了一个模块导入的死递归)
解决方法:再建立一个新的模块,让这两个递归的模块成为子模块,让那个新的模块调用这两个模块
'''
'''
给程序传参:sys
import sys
print(sys.argv) #这里sys.argv是一个列表,0表示程序名,1:表示传入的参数
'''
# sys.argv 例子
import sys
print(sys.argv)
['/home/shj/WorkStations/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py', '-f', '/run/user/1000/jupyter/kernel-fc9aa604-d8c9-4367-a568-145f624bfffd.json']
'''
input() 键入字符串
'''
'''
repr(): 产生一个解释器易读的表达形式。
print() 打印
'''
# repr() 例子
s = '123456'
repr(s)
"'123456'"
'''
格式化输出
print('xxx %d' %(123))
print('strings{key}'.format())# {}中可以设置变量名,在format中用key=value赋值,{}中设置数字顺序在format中可以按序号给出值
'''
#format()例子
print("this is sequence:{} {} {}".format('who','am', 'i'))
print('*'*8)
print("this is no sequence:{2} {1} {0}".format('who','am', 'i'))
this is sequence:who am i
********
this is no sequence:i am who
'''
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True)
参数说明:
{
file: 必需,文件路径(相对或者绝对路径)
mode: 可选,文件打开模式
buffering: 设置缓冲区大小,默认-1:全缓冲,0:无缓冲,1:行缓冲,大于1的任意整数:任意字节大小的缓冲区
encoding: 一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
}
file.close() 关闭
file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件
file.fileno() 返回一个整型的文件描述符(file descriptor FD 整型),
可以用在如os模块的read方法等一些底层操作上。
file.isatty() 如果文件连接到一个终端设备返回 True,否则返回 False。
file.next() 返回文件下一行。(python3中不支持此方法)
file.read([size]) 从文件读取指定的字节数,如果未给定或为负则读取所有。
file.write(str)
file.readline([size]) 读取整行,包括 "\n" 字符。 size表示读取的行内字节数,
当size大小超过整行数据大小时,读取整行
file.readlines([sizeint]) 读取所有行并返回列表,若给定sizeint>0,
返回总和大约为sizeint字节大小的所在行,
实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
file.seek(size,pos(0开头,1中间,2结尾)) size表示偏移量(单位为字节),
pos表示偏移位置(0开头,1中间,2结尾)
file.tell() 返回地址
file.writelines(sequence) 向文件写入一个序列字符串列表,
如果需要换行则要自己加入每行的换行符。
file.truncate([size]) 从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;
截断之后后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。
OS
import os
os.rename("old","new") #重命名
os.mkdir("name") #创建dir
os.getcwd() #获取当前路径
os.chdir("newpath") #改变默认目录
os. listdir("./") #获取目录
'''
# 文件例子
import os
print(os.listdir('./Gnerate_files/'))
with open('./Gnerate_files/fileDemo.txt','w',encoding='utf-8') as f_out:
f_out.write('this is a file wirte demo.')
print("file writed!")
print(os.listdir('./Gnerate_files/'))
with open('./Gnerate_files/fileDemo.txt','r',encoding='utf-8') as f_in:
print("file read in:")
print(f_in.read())
['.ipynb_checkpoints', 'data.pkl', 'func2.log', 'out.log', '闭包用途2使用文档.txt']
file writed!
['.ipynb_checkpoints', 'data.pkl', 'fileDemo.txt', 'func2.log', 'out.log', '闭包用途2使用文档.txt']
file read in:
this is a file wirte demo.
'''
pickle 模块
python的pickle模块实现了基本的数据序列和反序列化。
序列化操作:将程序中运行的对象信息保存到文件中去,永久存储。
反序列化操作:可从文件中创建上一次程序保存的对象。
基本接口:
pickle.dump(obj, file, [,protocol]) 将数据序列化(二进制)输出到文件
protocol为可选参数,默认为0,当为-1时为最高级协议版本
x = pickle.load(file) 将file文件保存的数据反序列化(还原)
str = pickle.dumps(data) 将data数据序列化为一串字符串
data_re = pickle.loads(str) 将序列化字符串str反序列化
'''
# 序列化
import pickle
# 使用pickle模块将数据对象保存到文件
data1 = {'a': [1, 2.0, 3, 4+6j],
'b': ('string', u'Unicode string'),
'c': None}
selfref_list = [1, 2, 3]
selfref_list.append(selfref_list)
output = open('./Gnerate_files/data.pkl', 'wb')
# Pickle dictionary using protocol 0.
pickle.dump(data1, output)
# Pickle the list using the highest protocol available.
pickle.dump(selfref_list, output, -1)
output.close()
#反序列化
import pprint, pickle, os
#使用pickle模块从文件中重构python对象
pkl_file = open('./Gnerate_files/data.pkl', 'rb')
data1 = pickle.load(pkl_file)
pprint.pprint(data1)
data2 = pickle.load(pkl_file)
pprint.pprint(data2)
pkl_file.close()
os.listdir('./Gnerate_files/')
{'a': [1, 2.0, 3, (4+6j)], 'b': ('string', 'Unicode string'), 'c': None}
[1, 2, 3, ]
['.ipynb_checkpoints',
'data.pkl',
'fileDemo.txt',
'func2.log',
'out.log',
'闭包用途2使用文档.txt']