常用的内建模块
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=1,hours=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
- 提供了MD5,SHA1算法,把任意长度的数据转换为一个长度固定的数据串
- 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)
- for c in itertools.chain(‘ABC’,’XYZ’):
- groupby()把迭代器中相邻的重复元素挑出来放到一起
- for key, group in itertools.groupby('AAABBBCCAAA'):
- print(key,list(group))
Contextlib
Urllib
- urllib的request模块可以非常方便地抓取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'))
- HTMLParser
- from html.parser import HTMLparser
- From html.entitlies import name2codepoint
- Class MyHTMLParser(HTMMLparser):
-
- def handle_starttag(self, tag, attrs):
print('<%s>' % tag)
def handle_endtag(self, tag):
print('</%s>' % tag)
def handle_startendtag(self, tag, attrs):
print('<%s/>' % tag)
def handle_data(self, data):
print(data)
def handle_comment(self, data):
print('<!--', data, '-->')
def handle_entityref(self, name):
print('&%s;' % name)
def handle_charref(self, name):
print('&#%s;' % name)
parser = MyHTMLParser()
parser.feed('''<html>
<head></head>
<body>
<!-- test html parser -->
<p>Some <a href=\"#\">html</a> HTML tutorial...<br>END</p>
</body></html>’'')
feed()方法可以多次调用,不需要一次一定把整个html都塞进去
Pillow
- 图像处理库
- 安装Pillow pip3 install pillow
- 具体使用,使用再查询
Chardet
- 检测编码
- 安装chardet,不过python3默认就已经安装了,没有的话自行安装
- Pip3 install chardet
- import chardet
- Chardet.detect(b’hello,world’)
Psutil
- 可以很方便的进行系统监控,跨平台
- 安装pip3 install psutil
- 如果遇到Permission denied安装失败,请加上sudo重试
- 获取CPU信息
- Import plutil
- Print (Plutil.cpu_count())#cpu逻辑数量
- print(logical=False)#cpu物理核心
- psutil.cpu_times()#统计CPU的用户/系统/空闲时间
- psutil.virtual_memory()#获取物理内存信息
- psutil.swap_memory()#获取交换内存信息
- psutil.disk_partitions() # 磁盘分区信息
- psutil.disk_usage('/') # 磁盘使用情况
- psutil.disk_io_counters() # 磁盘IO
- psutil.net_io_counters() # 获取网络读写字节/包的个数
- psutil.net_if_addrs() # 获取网络接口信息
- psutil.net_if_stats() # 获取网络接口状态
- psutil.net_connections() #获取当前网络链接信息
- psutil.pids() # 所有进程ID
- p = psutil.Process(3776) # 获取指定进程ID=3776,其实就是当前Python交互环境
- P.name()
- P.exe()
- p.cwd()
- p.cmdline()
- P.ppid()
- P.parent()
- P.children()
- P.status()
- P.username()
- P.create_time()
- psutil.test() 模拟ps命令效果
-
Tkinter 图形界面
- from tinter import *
- 在GUI中,每个button、label、输入框等都是一个widget。frame则是可以容纳其他widget的widget
- Pack()把widget加到父容器中,并实现最简单的布局
- gird()实现复杂的布局