[关闭]
@chenwei123 2018-07-05T09:20:54.000000Z 字数 5048 阅读 452

常用内建模块

Python


1. datetime日期模块

1. 获取当前日期和事件

  1. from datetime import datetime
  2. now = datetime.now()
  3. print(now) #2017-11-30 17:27:13.672413
  4. print(type(now)) #<class 'datetime.datetime'>

2. 获取指定日期和时间

  1. from datetime import datetime
  2. dt = datetime(2015, 4, 19, 12, 20)
  3. print(dt) #2015-04-19 12:20:00

3. datetime 转换为 timestamp

  1. from datetime import datetime
  2. dt = datetime(2015, 4, 19, 12, 20)
  3. 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

4. timestamp 转换为 datetime

  1. from datetime import datetime
  2. t = 1429417200.0
  3. print(datetime.fromtimestamp(t)) #2015-04-19 12:20:00, # 本地时间
  4. print(datetime.utcfromtimestamp(t)) #2015-04-19 04:20:00 #UTC时间

5. 时间字符串str转换为 datetime

  1. from datetime import datetime
  2. cday = datetime.strptime("2015-6-1 18:19:59", "%Y-%m-%d %H:%M:%S")
  3. print(cday) #转换后的datetime是没有时区信息的, 2015-06-01 18:19:59

点击了解更多关于 strptime

6. datetime 转换为 str

  1. from datetime import datetime
  2. now = datetime.now()
  3. print(now.strftime("%a, %b %d %H:%M")) #Thu, Nov 30 18:21

点击了解更多关于 strftime

7. 本地时间转换为 UTC 时间

  1. from datetime import datetime, timedelta, timezone
  2. tz_utc_8 = timezone(timedelta(hours=8)) #创建时区 UTC+8:00
  3. now = datetime.now() #datetime.datetime(2017, 12, 1, 18, 20, 10, 904584)
  4. dt = now.replace(tzinfo=tz_utc_8) #强制设置为 UTC+8:00
  5. dt#datetime.datetime(2017, 12, 1, 18, 20, 10, 904584, tzinfo=datetime.timezone(datetime.timedelta(0, 28800)))

8. 时区转换

1. 拿到 UTC 时间,并强制设置时区为 UTC+0:00
  1. utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
  2. print(utc_dt) #2017-12-01 10:23:08.534919+00:00
2. astimezone()将转换时区为北京时间:
  1. bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
  2. print(bj_dt) #2017-12-01 18:23:08.534919+08:00
3. astimezone()将转换时区为东京时间:
  1. tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))
  2. print(tokyo_dt) #2017-12-01 19:23:08.534919+09:00
4. astimezone()将bj_dt转换时区为东京时间:
  1. tokyo_dt2 = bj_dt.astimezone(timezone(timedelta(hours=9)))
  2. print(tokyo_dt2) #2017-12-01 19:23:08.534919+09:00

注意:不是必须从UTC+0:00时区转换到其他时区,任何带时区的datetime都可以正确转换,例如上述bj_dttokyo_dt的转换。

2. collections 集合模块

1. namedtuple

  1. from collections import namedtuple
  2. Point = namedtuple('Point', ['x', 'y'])
  3. p = Point(1,2)
  4. p.x #1
  5. isinstance(p, Point) #True
  6. isinstance(p, tuple) #True

namedtuple是一个函数,它用来创建一个自定义的 tuple 对象,并且规定了 tuple 元素个数,并可以用属性而不是索引来引用 tuple 的某个元素

2. deque

  1. from collections import deque
  2. q = deque(['a', 'b', 'c'])
  3. q.append('x')
  4. q.appendleft('y')
  5. q #deque(['y', 'a', 'b', 'c', 'x'])
  6. q.pop() #deque(['y', 'a', 'b', 'c'])
  7. q.popleft() #deque(['a', 'b', 'c'])

deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈,可以在队尾,队首,插入,删除

3. defaultdict

  1. from collections import defaultdict
  2. dd = defaultdict(lambda:'N/A')
  3. dd['key1'] = 'abc'
  4. dd['key1'] #'abc'
  5. dd['key2'] #'N/A'
  • defaultdict, 使用 dict 时,如果引用的 key 不存在,就会抛 KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict。
  • 注意 : 默认值是调用函数返回的,而函数在创建defaultdict对象时传入。除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。

4. OrderedDict

  1. from collections import OrderedDict
  2. d = dict([('a', 1), ('b', 2), ('c', 3)]) #{'a': 1, 'b': 2, 'c': 3}
  3. dic = OrderedDict() #OrderedDict()用来创建一个空的有序字典

使用 dict 时,key 是无序的。如果要保持 key 的顺序,可以用 OrderedDict。OrderedDict,与普通字典不同的是记录了键值对的添加顺序。

5. Counter

  1. from collections import Counter
  2. c = Counter()
  3. for ch in 'programming':
  4. c[ch] = c[ch] + 1
  5. c #Counter({'m': 2, 'r': 2, 'g': 2, 'n': 1, 'o': 1, 'p': 1, 'a': 1, 'i': 1})

Counter 是一个简单的计数器,例如,统计字符出现的个数

3. 加密算法

1. base64

  1. import base64
  2. base64.b64encode(b'binary\x00string') #b'YmluYXJ5AHN0cmluZw==
  3. base64.b64decode(b'YmluYXJ5AHN0cmluZw==') #b'binary\x00string'
  4. base64.b64encode(b'i\xb7\x1d\xfb\xef\xff') #b'abcd++//'
  5. base64.urlsafe_b64encode(b'i\xb7\x1d\xfb\xef\xff') #b'abcd--__'
  6. base64.urlsafe_b64decode('abcd--__') #b'i\xb7\x1d\xfb\xef\xff'

Base64是一种用64个字符来表示任意二进制数据的方法

2. hashlib

  1. import hashlib
  2. md5 = hashlib.md5()
  3. md5.update('how to use md5 in python hashlib?'.encode('utf-8'))
  4. print(md5.hexdigest()) #d26a53750bc40b38b65a520292f69306

Python的hashlib提供了常见的摘要算法,如MD5SHA1等等。md5是最常见的摘要算法,速度很快,生成结果是固定的128bit 字节,通常用一个32位的16进制字符串表示。另一种常见的算法是 SHA1SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。

  1. sha1 = hashlib.sha1()
  2. sha1.update('how to use md5 in python hashlib?'.encode('utf-8'))
  3. print(sha1.hexdigest()) #b752d34ce353e2916e943dc92501021c8f6bca8c

3. hmac

  1. import hmac
  2. message = b'hello world!'
  3. key=b'secret'
  4. h = hmac.new(key, message, digestmod='MD5')
  5. h.hexdigest() #0a0461e10e89506d7c31a145663bed93

Python自带的hmac模块实现了标准的Hmac算法。使用hmac和普通hash算法非常类似。hmac输出的长度和原始哈希算法的长度一致。需要注意传入的key和message都是bytes类型,str类型需要首先编码为bytes

4. urllib

  1. from urllib import request
  2. with request.urlopen('https://api.douban.com/v2/book/2129650') as f:
  3. data = f.read()
  4. print('Status', f.status, f.reason)
  5. for k,v in f.getheaders():
  6. print('%s:%s' % (k,v))
  7. print('Data:', data.decode('utf-8'))

urllib提供了一系列用于操作URL的功能。urllibrequest模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应

5. random

  1. from random import randint
  2. x = randint(1, 6) #返回 1~6 内的整数,包括1和6

random包含以各种方式生成随机数的函数,其中 randint()返回一个位于指定范围内的整数。

6. math

7. format

题外话:要了解更多关于 Python 标准库的资源,请访问:https://pymotw.com/3/

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注