python常用内建模块

python常用内建模块

  • datetime
    • 获取时间
    • datetime 与 timestamp之间的转换
    • str 与 datetime之间的转换
    • datetime的加减
    • 本地时间转换为UTC时间
  • collections
    • namedtuple
    • deque
    • defaultdict
    • OrderedDict
    • ChainMap
    • Counter
  • hashilib
    • 哈希算法
      • MD5
      • SHA1
    • 加盐
  • hmac
  • contextlib
  • urllib
    • get

datetime

库的导入
from datetime import datetime#第一个datetime是模块,第二个datetime是这个模块下的一个类

获取时间

  1. 获取当前日期和时间
from datetime impot datetime as dt
now=dt.now()

datetime.now()获取当前日期和时间

  1. 获取指定日期和时间
from datetime import datetime as dt
dt1=dt(2015,4,19,12,20) # 2015-04-19  12:20:00

datetime(参数)直接用参数构造一个日期和时间

datetime 与 timestamp之间的转换

  1. 什么是timestamp?
    在计算机中,时间实际上使用数字表示的;并用秒计时。
  • 把1970年1月1日的00:00:00 UTC+00:00时区的时刻记为0
    再次以前的时间timestamp为负数
  • timestamp是一个浮点数,小数位表示毫秒
  1. datetime转换为timestamp
    利用dt时间.timestamp()可以把datetime转换为timestamp
    【例子】
from datetime import datetime
now=datetime.now()
now.timestamp()

好奇datetime.timestamp(dt时间)可不可以实现

  1. timestamp转换为datetime
    利用datetime.fromtimestamp(ts时间)可以把timestamp转换为datetime
    【例子】
from datetime import datetime
ts=1429417200.0
datetime.fromtimestamp(ts)

datetime 有时区;而timestamp没有时区;
所以上述转换是在timestamp和本地时间做转换

str 与 datetime之间的转换

  1. str转换为datetime
    因为用户输入的日期和时间是字符串,so需要把str转换为datetime
    利用datetime.strptime('字符串','字符串格式')可以将str转换为datetime
    【例子】
from datetime import datetime
cday=datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
  1. datetime转换为str
    需要把datetime格式化为字符串显示给用户
    利用dt时间.strftime('字符串格式')可以实现datetime转换为str
    【例子】
from datetime import datetime
now=datetime.now()
print(now.strftime('%a,%b,%d  %H:%M'))

datetime的加减

导入timedelta可以直接用+-运算符对datetime进行加减运算
【例子】

from datetime import datetime,timedelta
now=datetime.now()
datetime.datetime(2015,5,18,16,57,3,540997)
now+timedelta(hours=10)
now-timedelta(day=1)

本地时间转换为UTC时间

collections

collections提供了许多有用的集合类

namedtuple

namedtuple('数据类型名称','[数据属性list]')可以方便地定义一种新的数据类型
【例子】

from collections import namedtuple
#定义**空间上的点**这一数据类型
point=namedtuple('point',['x','y'])
p=point(1,2)
p.x # 1
p.y #2

deque

deque([list])可以高效实现插入和删除,弥补list的不足
【例子】

from collections import deque
q=deque(['a','b','c'])
q.append('x')
q.appendleft('y')
q #deque(['y','a','b','c','x'])

deque([list]).append('插入的元素')
deque([list]).appendleft('插入的元素')
deque([list]).pop()
deque([list]).popleft()

defaultdict

使用dict时,如果引用的Key不存在,就会抛出KeyError;
如果希望key不存在时,返回一个默认值,就可以用defaultdict()
【例子】

from collections import defaultdict
dd=defaultdict(lambda:'N/A')
dd['key1']='abc'
dd['key1'] #'abc'
dd['key2'] #'N/A'

除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。

OrderedDict

使用dict时,Key是无序的;
利用OrderedDict()可以保持Key的顺序。

>>> from collections import OrderedDict
>>> od = OrderedDict()
>>> od['z'] = 1
>>> od['y'] = 2
>>> od['x'] = 3
>>> list(od.keys()) # 按照插入的Key的顺序返回
['z', 'y', 'x']

OrderedDict的Key会按照插入的顺序排列,不是Key本身排序

ChainMap

Counter

利用Counter可以统计字符出现的个数
【例子】

from collections import Counter
for ch in 'programing':
	Couter[ch]=Couter[ch]+1

hashilib

哈希算法

函数
任意长度的数据
长度固定的字符串
哈希算法
  • 通过一个函数f(),把任意长度的数据data转换为一个长度固定的字符串digest(通常是16进制的字符串);
  • 目的是为了发现原始数据是否被人篡改过;提高查询效率
    • 摘要函数f()是一个单向函数,计算 f ( d a t a ) = d i g e s t f(data)=digest f(data)=digest很容易,但是很难反推;
    • 这种转换是一种压缩映射(散列值的空间通常<输入的空间);
    • 不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。
  • 常见的哈希算法有MD5SHA1等等
  • 常用于网站用户名和口令的储存

MD5

new_md5=hashlib.md5('字符串'.encode('utf-8')).hexdigest()#utf-8是万国码

【例子】

import hashlib
md5=hashlib.md5()  
md5.update('how to use md5 in python hashlib?').encode('utf-8'))
print(md4.hexdigest())
  1. 建立加密对象md5=hashlib.md5()
  2. 对字符串进行算法加密,update
  3. 获得16进制显示,hexdigest

如果数据量很大,可以分块多次调用’update()’

import hashlib
md5=hashlib.md5('how to use md5 in').encode('utf-8'))
md5.update('python hashlib?').encode('utf-8'))
print(md4.hexdigest())

SHA1

sha1的用法与md5一样

  • sha1的结果是160bit字节,40位的16进制字符串
  • md5的结果是128bit字节,32位的16进制字符串

加盐

防止黑客根据简单密码的md5对比数据库中的md5;
利用原始口令+一个复杂字符串进一步保证数据安全。

def calc_md5(password):
	return get_md5(password+'the-salt')

hmac

采用Hmac替代我们自己的salt算法,可以使程序算法更标准化,也更安全。
hmac算法需要随机key、原始message、哈希算法

import hmac
message=b'hello,world!'
key=b'secret'
h=hmac.new(key,message,digestmod='md5')
h.hexdigest()

利用b将字符串转换为编码

contextlib

urllib

get

from urllib import request
 
with request.urlopen('http://api.douban.com/v2/book/2129650') as f:
	data=f.read()
	print()

你可能感兴趣的:(编辑,笔记)