python-常用模块


常用的内建模块

datetime

  • From datetime import datetime
  • Datetime.now()返回当前日期时间类型是datetime
  • Datetime(y,m,d,H,i,s)参数年月日时分秒 返回datetime类型
  • Datetime().timestamp()  datetime转换为timestamp
  • Datetime.fromtimestamp(t) timestamp转换为datetime类型
  • Datetime.utcfromtimestamp(t) timestamp转换为 UTC标准时间
  • Datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S’)将字符串转换为datetime类型
  • Datetime.now().strftime(%a, %b %d %H:%M)datetime类型转为字符串型
  • datetime加减 from datetime import datetime,timedelta
  • datetime.now()+timedelta(days=1)明天日期时间
  • datetime.now()-timedelta(hours=10)十小时之前的时间
  • datetime.now()+timedelta(days=1hours=10)一天十个小时后的日期
  • Timezone(timedelta(hours=8))创建时区
  • datetime.now().replace(tzinfo=Timezone(timedelta(hours=8)))强制设置时区
  • Datetime.utcnow().replace(tzinfo=timezone.utc)拿到utc时间,并强制时区
  • 时区对象.astimezone(timezone(timedelta(hours=8)))转换时区为北京时区


Collections集合模块


  • namedtuple 函数,用来创建自定义tuple对象,规定了tuple元素个数,并且可以用属性而不是索引来引用tuple某个元素
    • from collections import namedtuple
    • Point = namedtuple(‘Point’,[‘x’,y])
    • p=Point(1,2)
    • P.x
  • 单向列表list可以通过del l[index] l.pop(value)删除
  • Deque 双向列表,可以高效实现插入和删除操作
    • from collections import deque
    • q=deque([‘a’,’b’,’c’])
    • q.append(‘x’)
    • Q.appendleft(‘y’)
    • append(),pop(),appendleft(),popleft()等操作



  • defaultdict 使用dict时引用的key不存在会抛出keyerror 使用defaultdict,当key不存在时返回一个默认值
    • from collections import defaultdict
    • dd=defaultdict(lambda: ’N/A’)
    • dd[‘key1’]=‘abc’
    • dd[‘key1’]#key1存在返回值
    • Dd[‘key2’]#key2不存在返回默认值 N/A



  • Ordereddict 可以保证key的顺序
  • dict中,key是无序的,无法确定key的顺序
    • from collections import OrderedDict
    • od=OrderedDict()
    • od[‘z’]=1
    • od[‘y’]=2
    • od[‘x’]=3
    • list(od.keys())按照插入的顺序返回


  • Counter 计数器

from collections import deque

>>> q = deque(['a', 'b', 'c'])

>>> q.append('x')

>>> q.appendleft('y')

>>> q


Base64

  • 一种用64个字符表示任意二进制数据的方法
    • import base64
    • Base64.b64encode()编码
    • Base64.b64decode()解码
    • Base64.urlsafe_b64encide()
    • base64.urlsafe_b64decode()


Struct 

  • 实现bytes与其他二进制数据的转换
    • import struct
    • Struct.pack(‘>I’,10240099)把任意数据类型转换成bytes
      • I表示4字节无符号整数H表示2字节无符号整数
    • struct.unpack(‘>IH’,b'\xf0\xf0\xf0\xf0\x80\x80')bytes变成相应的数据类型


Hashlib


  • 提供了MD5SHA1算法,把任意长度的数据转换为一个长度固定的数据串
    • import hashlib
    • md5=hashlib.md5()
    • Md5.update(‘string’.encode(‘utf-8’))
    • md5.hexdigest()
  • sha1用法与md5一致


Hmac

  • 一种标准算法,md5的加强
    • import hmac 
    • message=b’hello,world!’;
    • key=b’secret’
    • h=hmac.new(key,message,digestmod=‘MD5’)
    • h.hexdigest()#查看生成的数据串


Itertools

  • 用于操作迭代对象
  • count()函数会创建一个无限迭代器
    • import itertools
    • natuals=itertools.count(1)
    • For n in natuals:
      • print(n)
  • cycle()会把传入的序列无限重复下去
    • import itertools
    • cs=itertools.cycle(‘ABC’)#字符串也是序列的一种
    • for c in cs:
      • print(c)

-repeat()函数把一个元素无限重复下去,指定了第二个参数就是重复的次数

    • itertools.repeat(‘A’,3)


  • chain()把一组迭代对象串联起来,形成更大的迭代器
    • for c in itertools.chain(‘ABC’,’XYZ’):
      • print(c)


  • groupby()把迭代器中相邻的重复元素挑出来放到一起
    • for key, group in itertools.groupby('AAABBBCCAAA'):
    • print(key,list(group))



Contextlib







Urllib

  • urllibrequest模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应:
  • url进行抓取
    • from urllib import request
    • With request.urlopen(‘url’) 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’))
  • get请求使用request对象(注意没有s),需要添加头信息
    • from urllib import request
    • req = request.Request('http://www.douban.com/')
    • req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')
    • with request.urlopen(req) 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’))


  • post请求,需要传参数
  •  


from urllib import request, parse

print('Login to weibo.cn...')

email = input('Email: ')

passwd = input('Password: ')

login_data = parse.urlencode([

    ('username', email),

    ('password', passwd),

    ('entry', 'mweibo'),

    ('client_id', ''),

    ('savestate', '1'),

    ('ec', ''),

    ('pagerefer', 'https://passport.weibo.cn/signin/welcome?entry=mweibo&r=http%3A%2F%2Fm.weibo.cn%2F')

])


req = request.Request('https://passport.weibo.cn/sso/login')

req.add_header('Origin', 'https://passport.weibo.cn')

req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')

req.add_header('Referer', 'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F')


with request.urlopen(req, data=login_data.encode('utf-8')) as f:

    print('Status:', f.status, f.reason)

    for k, v in f.getheaders():

        print('%s: %s' % (k, v))

    print('Data:', f.read().decode('utf-8'))



































































猜你喜欢

转载自blog.csdn.net/benben0729/article/details/80244303