import json
# Json模块提供了四个功能:dumps、dump、loads、load dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = json.dumps(dic) # 序列化:将一个字典转换成一个字符串
# print(type(str_dic),str_dic) # <class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
# 注意,json转换完的字符串类型的字典中的字符串是由""表示的 dic2 = json.loads(str_dic) # 反序列化:将一个字符串格式的字典转换成一个字典
# 注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
# print(type(dic2),dic2) # <class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}]
str_dic = json.dumps(list_dic) # 也可以处理嵌套的数据类型
# print(type(str_dic),str_dic) # <class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}] list_dic2 = json.loads(str_dic)
# print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}] with open('json_file','w',encoding='utf-8') as f:
dic = {'k1':'v1','k2':'v2','k3':'v3'}
json.dump(dic,f,ensure_ascii=False)
# dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件 with open('json_file',encoding='utf-8') as f:
dic2 = json.load(f) # load不能load多次
# load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回 # ensure_ascii: 当它为True的时候,所有非ASCII码字符显示为\uXXXX序列,只需在dump时将ensure_ascii设置为
# False即可,此时存入json的中文即可正常显示。
# sort_keys:将数据根据keys的值进行排序。 # 多次dump一次load json的时候,json文件里面有多个对象,是无法解析的。要不你就自己把这些对象分开,然后再
# json.loads() 要不就存在不同的json文件里面。
# 示例
# with open('data.json', 'w') as f:
# f.write(json.dumps(d1) + '\n' + json.dumps(d2)) # 用换行分开
# 读取时自己分开
# with open('data.json', 'r') as f:
# print(json.loads(f.readline())) import pickle # json,用于字符串 和 python数据类型间进行转换,json是一种所有的语言都可以识别的数据结构。
# pickle,用于python特有的类型 和 python的数据类型间进行转换,如果你序列化的内容是列表或者
# 字典,我们非常推荐你使用json模块
# pickle模块提供了四个功能:# dumps、loads对内存中的数据进行序列化和反序列化 # dump写入文件,load从文件读取 dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = pickle.dumps(dic) # print(str_dic) #一串二进制内容
dic2 = pickle.loads(str_dic) # print(dic2) #字典 # import time # struct_time = time.localtime(1000000000) # print(struct_time)
with open('pickle_file','wb') as f:
pickle.dump(struct_time,f)
with open('pickle_file','rb') as f:
struct_time2 = pickle.load(f) # print(struct_time2.tm_year)
# 多次dump进一个文件,可使用对应load次数获取数据 import shelve
# 操作和字典类似
# shelve也是python提供给我们的序列化工具,比pickle用起来更简单一些。
# shelve只提供给我们一个open方法,是用key来访问的,使用起来和字典类似。 f = shelve.open('shelve_file')
f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'} #直接对文件句柄操作,就可以存入数据
existing = f1['key'] #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错
f.close() f = shelve.open('shelve_file', flag='r')
# 这个模块有个限制,它不支持多个应用同一时间往同一个DB进行写操作。所以当我们知道我们的应用如果只
# 进行读操作,我们可以让shelve通过只读方式打开DB f2 = shelve.open('shelve_file', writeback=True)
# 由于shelve在默认情况下是不会记录待持久化对象的任何修改的,所以我们在shelve.open()时候需要修改默
# 认参数,否则对象的修改不会保存。
# writeback方式有优点也有缺点。优点是减少了我们出错的概率,并且让对象的持久化对用户更加的透明了;
# 但这种方式并不是所有的情况下都需要,首先,使用writeback以后,shelf在open()的时候会增加额外的内
# 存消耗,并且当DB在close()的时候会将缓存中的每一个对象都写入到DB,这也会带来额外的等待时间。因为
# shelve没有办法知道缓存中哪些对象修改了,哪些对象没有修改,因此所有的对象都会被写入。 import hashlib md5 = hashlib.md5()
md5.update('how to use md5 in python hashlib?'.encode('utf-8')) #TypeError: Unicode-objects must be encoded before hashing
# print md5.hexdigest() # d26a53750bc40b38b65a520292f69306
# 如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的:
# md5.update('how to use md5'.encode('utf-8'))
# md5.update(' in python hashlib?'.encode('utf-8')) # d26a53750bc40b38b65a520292f69306
# MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。
# 另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似:
# sha1 = hashlib.sha1()
# sha1.update('how to use sha1 in ')
# sha1.update('python hashlib?')
# print sha1.hexdigest() hashlib.md5("salt".encode("utf8")) # 经过Salt处理的MD5口令 俗称“加盐”
# 摘要算法在很多地方都有广泛的应用。要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要
# 反推明文),只能用于防篡改,但是它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。 import collections # 在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:
# Counter、deque、defaultdict、namedtuple和OrderedDict等。 from collections import namedtuple
# Point = namedtuple('Point', ['x', 'y']) # 一个点的二维坐标就可以表示成:
# p = Point(1, 2) # p2 = Point(3, 2)
# print(P ,P.x ,P.y) # Point(x=1, y=2) 1 2
# 类似的,如果要用坐标和半径表示一个圆,也可以用namedtuple定义:# namedtuple('名称', [属性list])
# Circle = namedtuple('Circle', ['x', 'y', 'r']) #队列
# # import queue # FIFO
# # q = queue.Queue()
# # q.put([1,2,3]) # 一次一个
# # print(q.get()) # 没有的话会阻塞
# # print(q.qsize()) # 有多少 from collections import deque
# q = deque(['a', 'b', 'c'])
# q.append('x')
# q.appendleft('y')
# print(q) # deque(['y', 'a', 'b', 'c', 'x'])
# deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),
# 这样就可以非常高效地往头部添加或删除元素。
# 使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,
# 数据量大的时候,插入和删除效率很低。
# deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈 from collections import OrderedDict
# 使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。
# 如果要保持Key的顺序,可以用OrderedDict:
# d = dict([('a', 1), ('b', 2), ('c', 3)])
# od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
# print(od) # OrderedDict([('a', 1), ('b', 2), ('c', 3)]) # OrderedDict的Key是有序的 # 注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:
# od = OrderedDict()
# od['z'] = 1 # od['y'] = 2 # od['x'] = 3
# od.keys() # ['z', 'y', 'x'] # 按照插入的Key的顺序返回 from collections import defaultdict
# 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,
# 将小于 66 的值保存至第二个key的值中。即: {'k1': 大于66 , 'k2': 小于66}
# values = [11, 22, 33,44,55,66,77,88,99,90]
# my_dict = defaultdict(list) # defaultdict(lambda:5)
# for value in values:
# if value>66:my_dict['k1'].append(value)
# else:my_dict['k2'].append(value) # 大概就是设置一个字典的默认value类型,然后直接用key对value这个值或这个类型所拥有的方法属性进行操作
# dd = defaultdict(lambda: 'N/A')
# dd['key2'] # key2不存在,返回默认值'N/A' from collections import Counter
# Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,
# 其中元素作为key,其计数作为value。
# c = Counter('abcdeabcdabcaba')
# print c # Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}) import time # 常用方法
# 1.time.sleep(2) # 单位为秒。
# 2.time.time() # 获取当前时间戳 # 在Python中,通常有这三种方式来表示时间:时间戳、元组(struct_time)、格式化的时间字符串
# python中时间日期格式化符号 %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12)
%d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12)
%M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称
%A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称
%c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示
%X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身 # 元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
索引(Index) 属性(Attribute)值(Values)
0 tm_year (年) 比如2011
1 tm_mon (月) 1 - 12
2 tm_mday (日) 1 - 31
3 tm_hour (时) 0 - 23
4 tm_min (分) 0 - 59
5 tm_sec (秒) 0 - 60
6 tm_wday (weekday) 0 - 6(0表示周一)
7 tm_yday (一年中的第几天) 1 - 366
8 tm_isdst(是否是夏令时) 默认为0 # time.strftime("%Y-%m-%d %X") # 时间字符串 # '2017-07-24 13:54:37'
# 时间元组:localtime将一个时间戳转换为当前时区的struct_time
# time.localtime()
# time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24,tm_hour=13, tm_min=59, tm_sec=37,tm_wday=0,
# tm_yday=205, tm_isdst=0) # 时间戳
# time.time() # 1500875844.800804 # -->结构化时间
# time.gmtime() # 如果不传参数,直接返回当前时间的struct_time
# time.localtime()
# time.gmtime(时间戳) # UTC时间,与英国伦敦当地时间一致
# time.localtime(时间戳) # 当地时间,在北京执行这个方法:与UTC时间相差8小时,UTC时间+8小时 = 北京时间
#
# time.gmtime(time.time())
# time.localtime(1500000000)
#
# time.strptime("2017-03-16","%Y-%m-%d") # time.strptime(时间字符串,字符串对应格式)
# print(ret) # time.struct_time(tm_year=2018, tm_mon=8, tm_mday=11, tm_hour=14, tm_min=11,tm_sec=52, tm_wday=5, tm_yday=223, tm_isdst=0) # -->时间戳 
# time.mktime(结构化时间)
# time.mktime(time.localtime(1500000000) # -->字符串时间
# time.strftime("格式定义","结构化时间") # 结构化时间参数若不传,则显示当前时间
# time.strftime("%Y-%m-%d",time.localtime(1500000000))
#
# time.asctime(结构化时间) # 如果不传参数,直接返回当前时间的格式化串
# time.asctime(time.localtime(1500000000)) # --> %a %b %d %H:%M:%S %Y串 # 'Fri Jul 14 10:40:00 2017'
#
# time.ctime(时间戳) # 如果不传参数,直接返回当前时间的格式化串
# time.ctime(1500000000) # --> %a %b %d %H:%M:%S %Y串 # 'Mon Jul 24 15:19:07 2017'

json pickle shelve hashlib collections time的更多相关文章

  1. python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)

    一.复习 反射 必须会 必须能看懂 必须知道在哪儿用 hasattr getattr setattr delattr内置方法 必须能看懂 能用尽量用__len__ len(obj)的结果依赖于obj. ...

  2. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  3. python序列化: json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  4. 常用模块(random,os,json,pickle,shelve)

    常用模块(random,os,json,pickle,shelve) random import random print(random.random()) # 0-1之间的小数 print(rand ...

  5. day6_python序列化之 json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  6. 6 - 常用模块(os,sys,time&datetime,random,json&picle,shelve,hashlib)

    导入模块 想使用 Python 源文件,只需在另一个源文件里执行 import 语句 import module1[, module2[,... moduleN] from语句让你从模块中导入一个指定 ...

  7. Python学习笔记——基础篇【第六周】——json & pickle & shelve & xml处理模块

    json & pickle 模块(序列化) json和pickle都是序列化内存数据到文件 json和pickle的区别是: json是所有语言通用的,但是只能序列化最基本的数据类型(字符串. ...

  8. Day 4-5 序列化 json & pickle &shelve

    序列化: 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. 反序列化: 把字符转成内存里的数据类型. 用于序列化的两个模块.他 ...

  9. 模块 - json/pickle/shelve/xml/configparser

    序列化: 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. 为什么要序列化: 有种办法可以直接把内存数据(eg:10个列表,3 ...

随机推荐

  1. python之排序算法-冒泡、选排、快排

    影响内排序算法性能的三个因素: 时间复杂度:即时间性能,高效率的排序算法应该是具有尽可能少的关键字比较次数和记录的移动次数 空间复杂度:主要是执行算法所需要的辅助空间,越少越好. 算法复杂性.主要是指 ...

  2. Java-String 类的常用方法

    Java 中 String 类的常用方法 Ⅰ String 类提供了许多用来处理字符串的方法,例如,获取字符串长度.对字符串进行截取.将字符串转换为大写或小写.字符串分割等,下面我们就来领略它的强大之 ...

  3. ROS学习笔记五:创建和使用ROS msg和srv

    1 msg和srv简介 1.1 msg文件 msg文件就是一个简单的text文件,其中每行有一个类型和名称,可用的类型如下: int8, int16, int32, int64 (plus uint* ...

  4. [POI2007]办公楼biu

    Description FGD开办了一家电话公司.他雇用了N个职员,给了每个职员一部手机.每个职员的手机里都存储有一些同事的电话号码.由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决 ...

  5. 浅谈算法——线段树之Lazy标记

    一.前言 前面我们已经知道线段树能够进行单点修改和区间查询操作(基本线段树).那么如果需要修改的是一个区间该怎么办呢?如果是暴力修改到叶子节点,复杂度即为\(O(nlog n)\),显然是十分不优秀的 ...

  6. Jquery操作常用表单元素

    由于对前端的东西不是很熟练,导致jquery操作表单的东西总是忘记,每次用都要查一下,效率低下,记录下来,以便下次使用. CheckBox checkbox改变事件 $('#IsAllSearch') ...

  7. Java集合框架源码(四)——Vector

    第1部分 Vector介绍 Vector简介 Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这 ...

  8. 阿里云虚拟主机的域名添加https的方法

    第一步:购买CDN套餐,阿里云虚拟主机目前是不支持https的,不过可以通过阿里云的CDN服务来跳转一下实现部署https 静态HTTPS请求数根据你的网站访问量来选择 第二步:申请SSL证书服务,有 ...

  9. php高效率对一维数组进行去重

    $input = array("a" => "green", "red", "b" => "gre ...

  10. Farseer.net轻量级开源框架说明及链接索引

    Farseer.net是什么? 基于.net framework 4 开发的一系列解决方案. 完全开源在GitHub中托管.并发布到NuGet中. Farseer.Net由最初的关系数据库ORM框架后 ...