常用内建模块

常用内建模块

关于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

    点击了解更多关于 strptime

  • datetime 转换为 str

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

    点击了解更多关于 strftime

  • 本地时间转换为 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_dttokyo_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提供了常见的摘要算法,如MD5SHA1等等。md5是最常见的摘要算法,速度很快,生成结果是固定的128bit 字节,通常用一个32位的16进制字符串表示。另一种常见的算法是 SHA1SHA1的结果是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的功能。urllibrequest模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应

5.random

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值