@chenwei123
2018-07-05T09:20:54.000000Z
字数 5048
阅读 452
Python
datetime日期模块
from datetime import datetimenow = datetime.now()print(now) #2017-11-30 17:27:13.672413print(type(now)) #<class 'datetime.datetime'>
from datetime import datetimedt = datetime(2015, 4, 19, 12, 20)print(dt) #2015-04-19 12:20:00
datetime 转换为 timestamp
from datetime import datetimedt = 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 datetimet = 1429417200.0print(datetime.fromtimestamp(t)) #2015-04-19 12:20:00, # 本地时间print(datetime.utcfromtimestamp(t)) #2015-04-19 04:20:00 #UTC时间
from datetime import datetimecday = datetime.strptime("2015-6-1 18:19:59", "%Y-%m-%d %H:%M:%S")print(cday) #转换后的datetime是没有时区信息的, 2015-06-01 18:19:59
from datetime import datetimenow = datetime.now()print(now.strftime("%a, %b %d %H:%M")) #Thu, Nov 30 18:21
from datetime import datetime, timedelta, timezonetz_utc_8 = timezone(timedelta(hours=8)) #创建时区 UTC+8:00now = datetime.now() #datetime.datetime(2017, 12, 1, 18, 20, 10, 904584)dt = now.replace(tzinfo=tz_utc_8) #强制设置为 UTC+8:00dt#datetime.datetime(2017, 12, 1, 18, 20, 10, 904584, tzinfo=datetime.timezone(datetime.timedelta(0, 28800)))
utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)print(utc_dt) #2017-12-01 10:23:08.534919+00:00
bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))print(bj_dt) #2017-12-01 18:23:08.534919+08:00
tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))print(tokyo_dt) #2017-12-01 19:23:08.534919+09:00
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的转换。
from collections import namedtuplePoint = namedtuple('Point', ['x', 'y'])p = Point(1,2)p.x #1isinstance(p, Point) #Trueisinstance(p, tuple) #True
namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素个数,并可以用属性而不是索引来引用 tuple 的某个元素
from collections import dequeq = 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是为了高效实现插入和删除操作的双向列表,适合用于队列和栈,可以在队尾,队首,插入,删除
from collections import defaultdictdd = defaultdict(lambda:'N/A')dd['key1'] = 'abc'dd['key1'] #'abc'dd['key2'] #'N/A'
defaultdict, 使用 dict 时,如果引用的 key 不存在,就会抛 KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict。- 注意 : 默认值是调用函数返回的,而函数在创建defaultdict对象时传入。除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。
from collections import OrderedDictd = dict([('a', 1), ('b', 2), ('c', 3)]) #{'a': 1, 'b': 2, 'c': 3}dic = OrderedDict() #OrderedDict()用来创建一个空的有序字典
使用 dict 时,key 是无序的。如果要保持 key 的顺序,可以用
OrderedDict。OrderedDict,与普通字典不同的是记录了键值对的添加顺序。
from collections import Counterc = Counter()for ch in 'programming':c[ch] = c[ch] + 1c #Counter({'m': 2, 'r': 2, 'g': 2, 'n': 1, 'o': 1, 'p': 1, 'a': 1, 'i': 1})
Counter是一个简单的计数器,例如,统计字符出现的个数
import base64base64.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个字符来表示任意二进制数据的方法
import hashlibmd5 = 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
import hmacmessage = 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
from urllib import requestwith 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的响应
from random import randintx = randint(1, 6) #返回 1~6 内的整数,包括1和6
random包含以各种方式生成随机数的函数,其中randint()返回一个位于指定范围内的整数。
math 数学函数: 更多详情,点击查看
import mathmath.floor(9.23432) #9math.ceil(9.234) #10math.sin(math.pi/2) #1
题外话:要了解更多关于 Python 标准库的资源,请访问:https://pymotw.com/3/