常用内建模块
关于Python, 一些比较常用的内建模块
1. datetime
日期模块
获取当前日期和事件
from datetime import datetime now = datetime.now() print(now) #2017-11-30 17:27:13.672413 print(type(now)) #<class 'datetime.datetime'>
获取指定日期和时间
from datetime import datetime dt = datetime(2015, 4, 19, 12, 20) print(dt) #2015-04-19 12:20:00
datetime
转换为timestamp
from datetime import datetime dt = datetime(2015, 4, 19, 12, 20) dt.timestamp() #把datetime 转换为 timestamp, 1429417200.0
- 在计算机中,时间实际上是用数字表示的。
- UTC时间:
timestamp = 0 = 1970-1-1 00:00:00 UTC+0:00
- 对应北京时间:
timestamp = 0 = 1970-1-1 08:00:00 UTC+8:00
timestamp
转换为datetime
from datetime import datetime t = 1429417200.0 print(datetime.fromtimestamp(t)) #2015-04-19 12:20:00, # 本地时间 print(datetime.utcfromtimestamp(t)) #2015-04-19 04:20:00 #UTC时间
时间字符串str转换为 datetime
from datetime import datetime cday = datetime.strptime("2015-6-1 18:19:59", "%Y-%m-%d %H:%M:%S") print(cday) #转换后的datetime是没有时区信息的, 2015-06-01 18:19:59
datetime 转换为 str
from datetime import datetime now = datetime.now() print(now.strftime("%a, %b %d %H:%M")) #Thu, Nov 30 18:21
本地时间转换为 UTC 时间
from datetime import datetime, timedelta, timezone tz_utc_8 = timezone(timedelta(hours=8)) #创建时区 UTC+8:00 now = datetime.now() #datetime.datetime(2017, 12, 1, 18, 20, 10, 904584) dt = now.replace(tzinfo=tz_utc_8) #强制设置为 UTC+8:00 dt#datetime.datetime(2017, 12, 1, 18, 20, 10, 904584, tzinfo=datetime.timezone(datetime.timedelta(0, 28800)))
时区转换
拿到 UTC 时间,并强制设置时区为 UTC+0:00
utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc) print(utc_dt) #2017-12-01 10:23:08.534919+00:00
astimezone()将转换时区为北京时间:
bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8))) print(bj_dt) #2017-12-01 18:23:08.534919+08:00
astimezone()将转换时区为东京时间:
tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=9))) print(tokyo_dt) #2017-12-01 19:23:08.534919+09:00
astimezone()将bj_dt转换时区为东京时间:
tokyo_dt2 = bj_dt.astimezone(timezone(timedelta(hours=9))) print(tokyo_dt2) #2017-12-01 19:23:08.534919+09:00
注意:不是必须从
UTC+0:00
时区转换到其他时区,任何带时区的datetime
都可以正确转换,例如上述bj_dt
到tokyo_dt
的转换。
2. collections 集合模块
1. namedtuple
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1,2)
p.x #1
isinstance(p, Point) #True
isinstance(p, tuple) #True
namedtuple
是一个函数,它用来创建一个自定义的tuple
对象,并且规定了tuple
元素个数,并可以用属性而不是索引来引用 tuple 的某个元素
2. deque
from collections import deque
q = deque(['a', 'b', 'c'])
q.append('x')
q.appendleft('y')
q #deque(['y', 'a', 'b', 'c', 'x'])
q.pop() #deque(['y', 'a', 'b', 'c'])
q.popleft() #deque(['a', 'b', 'c'])
deque
是为了高效实现插入和删除操作的双向列表,适合用于队列和栈,可以在队尾,队首,插入,删除
3. defaultdict
from collections import defaultdict
dd = defaultdict(lambda:'N/A')
dd['key1'] = 'abc'
dd['key1'] #'abc'
dd['key2'] #'N/A'
defaultdict
, 使用 dict 时,如果引用的 key 不存在,就会抛 KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict。- 注意 : 默认值是调用函数返回的,而函数在创建defaultdict对象时传入。除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。
4. OrderedDict
from collections import OrderedDict
d = dict([('a', 1), ('b', 2), ('c', 3)]) #{'a': 1, 'b': 2, 'c': 3}
dic = OrderedDict() #OrderedDict()用来创建一个空的有序字典
使用 dict 时,key 是无序的。如果要保持 key 的顺序,可以用
OrderedDict
。OrderedDict,与普通字典不同的是记录了键值对的添加顺序。
5. Counter
from collections import Counter
c = Counter()
for ch in 'programming':
c[ch] = c[ch] + 1
c #Counter({'m': 2, 'r': 2, 'g': 2, 'n': 1, 'o': 1, 'p': 1, 'a': 1, 'i': 1})
Counter
是一个简单的计数器,例如,统计字符出现的个数
3. 加密算法
1. base64
import base64
base64.b64encode(b'binary\x00string') #b'YmluYXJ5AHN0cmluZw==
base64.b64decode(b'YmluYXJ5AHN0cmluZw==') #b'binary\x00string'
base64.b64encode(b'i\xb7\x1d\xfb\xef\xff') #b'abcd++//'
base64.urlsafe_b64encode(b'i\xb7\x1d\xfb\xef\xff') #b'abcd--__'
base64.urlsafe_b64decode('abcd--__') #b'i\xb7\x1d\xfb\xef\xff'
Base64
是一种用64个字符来表示任意二进制数据的方法
2. hashlib
import hashlib
md5 = hashlib.md5()
md5.update('how to use md5 in python hashlib?'.encode('utf-8'))
print(md5.hexdigest()) #d26a53750bc40b38b65a520292f69306
Python的
hashlib
提供了常见的摘要算法,如MD5
,SHA1
等等。md5
是最常见的摘要算法,速度很快,生成结果是固定的128bit 字节,通常用一个32位的16进制字符串表示。另一种常见的算法是SHA1
,SHA1
的结果是160 bit字节,通常用一个40位的16进制字符串表示。
sha1 = hashlib.sha1()
sha1.update('how to use md5 in python hashlib?'.encode('utf-8'))
print(sha1.hexdigest()) #b752d34ce353e2916e943dc92501021c8f6bca8c
3. hmac
import hmac
message = b'hello world!'
key=b'secret'
h = hmac.new(key, message, digestmod='MD5')
h.hexdigest() #0a0461e10e89506d7c31a145663bed93
Python自带的
hmac
模块实现了标准的Hmac算法。使用hmac和普通hash算法非常类似。hmac输出的长度和原始哈希算法的长度一致。需要注意传入的key和message都是bytes类型,str类型需要首先编码为bytes
4. urllib
from urllib import request
with request.urlopen('https://api.douban.com/v2/book/2129650') as f:
data = f.read()
print('Status', f.status, f.reason)
for k,v in f.getheaders():
print('%s:%s' % (k,v))
print('Data:', data.decode('utf-8'))
urllib
提供了一系列用于操作URL的功能。urllib
的request
模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应
5.random
from random import randint
x = randint(1, 6) #返回 1~6 内的整数,包括1和6
random
包含以各种方式生成随机数的函数,其中randint()
返回一个位于指定范围内的整数。
题外话:要了解更多关于 Python 标准库的资源,请访问:https://pymotw.com/3/