Python内置了许多非常有用的模块,无需额外安装和配置,即可直接使用。
datetime
是Python处理日期和时间的标准库。通过from datetime import datetime
导入的才是datetime这个类。datetime默认表示本地时间,如果要转换时区或utc时间,可以先转换为timestamp
from datetime import datetime
#1、获取当前时间
now = datetime.now() # 获取当前datetime
print(now) # 2018-08-13 12:22:01.392888
print(type(now)) #
# 2、获取指定时间
dt = datetime(2018, 8, 13, 12, 20) # 用指定日期时间创建datetime
print(dt) # 2018-08-13 12:20:00
# 3、datetime转换为timestamp
print(dt.timestamp()) #1429417200.0
# 4、timestamp转换为 datetime
t = 1429417200.0
print(datetime.fromtimestamp(t)) #2015-04-19 12:20:00
# 5、字符串转换为datetime
cday = datetime.strptime('2018-8-13 18:19:59', '%Y-%m-%d %H:%M:%S')
print(cday)
# 6、datetime转换为字符串
print(now.strftime('%a, %b %d %H:%M'))
# 7、datetime加减
now + timedelta(hours=10) #10个小时后
now - timedelta(days=1) #一天前
now + timedelta(days=2, hours=12) #两天12小时后
collections是Python内建的一个集合模块,提供了许多有用的集合类。
1、namedtuple
是一个函数,用来创建一个自定义的tuple对象,并且规定了tuple元素的个数
from collections import namedtuple
# namedtuple('名称', [属性list]):
Point = namedtuple('Point', ['x', 'y']) # 定义个坐标
Circle = namedtuple('Circle', ['x', 'y', 'r']) # 顶一个圆
2、deque
有时代替list,list是线性存储,数据量大的时候,插入和删除效率很低。
from collections import deque
q = deque(['a', 'b', 'c'])
q.append('x') #从尾部插入
q.appendleft('y')#从头部插入
q.pop()#从尾部移除
q.popleft()#从头部移除
3、使用dict时,如果引用的Key不存在,就会抛出KeyError;使用defaultdict
可以返回一个默认值
from collections import defaultdict
dd = defaultdict(lambda: 'N/A')#定义时指定默认值N/A
dd['key1'] = 'abc'
dd['key1'] # key1存在
dd['key2'] # key2不存在,返回默认值'N/A'
用于提供目录和文件操作,这些函数有的在os模块中,有的在os.path模块中,如下:
os.getcwd() // 获取当前工作目录,即当前Python脚本工作的目录路径
os.chdir("dirname") // 改变当前脚本工作目录;相当于shell下cd
os.curdir // 返回当前目录: ('.')
os.pardir // 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2') // 可生成多层递归目录
os.removedirs('dirname1') // 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') // 创建目录,相当于shell中mkdir dirname
os.rmdir('dirname') // 删除空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') // 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() // 删除一个文件
os.rename("oldname","newname") // 重命名文件/目录
os.stat('path/filename') // 获取文件/目录信息
os.sep // 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep // 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep // 输出用于分割文件路径的字符串
os.name // 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bashcommand") // 运行shell命令,直接显示
os.environ // 获取系统环境变量
os.path.abspath(path) // 返回path规范化的绝对路径
os.path.split(path) // 将path分割成目录和文件名二元组返回
os.path.dirname(path) // 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) // 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) // 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) // 如果path是绝对路径,返回True
os.path.isfile(path) // 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) // 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[,...]]) // 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) // 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) // 返回path所指向的文件或者目录的最后修改时间
用于提供对解释器相关的操作
sys.argv // 命令行参数List,第一个元素是程序本身路径
sys.exit(n) // 退出程序,正常退出时exit(0)
sys.version // 获取Python解释程序的版本信息
sys.maxint // 最大的Int值
sys.path // 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform // 返回操作系统平台名称
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。摘要函数是一个单向函数,通过digest反推data却非常困难。注意摘要算法不是加密算法,只能用于防篡改,但是它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。
对原始密码加盐md5(message + salt),然后计算md5,只要Salt不被黑客知道,即使用户输入简单口令,也很难通过MD5反推明文口令。
import hashlib
md5 = hashlib.md5()
md5.update('how to use md5 in python hashlib?'.encode('utf-8'))
print(md5.hexdigest())
####contextlib模块
正确关闭文件资源的一个方法是使用try…finally,但是写try…finally非常繁琐。Python的with语句允许我们非常方便地使用资源,而不必担心资源没有关闭:
with open('/path/to/file', 'r') as f:
f.read()
实际上,任何对象,只要正确实现了上下文管理,就可以用于with语句。
####json 和 pickle模块
我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等都是一个意思。
pickle.dumps() // 返回一个str,内容就是标准的JSON。
pickle.loads() // 把JSON反序列化为Python对象
python处理异常、日志以及正则表达式
其他如计数器Counter
、排序dic:OrderedDict
,random
模块,logging
,
shutil
模块:高级的 文件、文件夹、压缩包 处理模块(递归,文件复制等)
configparser
模块:用于对特定的配置进行操作,
shelve
模块:一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
###常用第三方模块
####pillow/chardet/psutl
图像处理标准库Pillow,如果安装了Anaconda,Pillow就已经可用了
pip install pillow/requests/chardet/psutil
psutil=process and system utilities,用简单的代码实现系统监控
####requests模块
Python已经内置的urllib模块,用于访问网络资源,但不如第三方库requests好用,如果安装了Anaconda,requests就已经可用了。
1、get请求
import requests
r = requests.get('https://www.baidu.com/')
r.status_code
r.text
r.url
对于带参数的URL,可以传入一个dict作为params参数:
r = requests.get('https://www.baidu.com/',params={'language': 'python', 'id': '1001'})
r.url // 输出'https://www.baidu.com/?language=python&id=1001'
如果返回是JSON数据,可以直接获取:
r = requests.get('https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20%3D%202151330&format=json')
r.json()
需要传入HTTP Header时,我们传入一个dict作为headers参数:
r = requests.get('https://www.baidu.com/', headers={'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit'})
r.text
2、post请求
POST请求,只需要把get()方法变成post(),然后传入data参数作为POST请求的数据:
r = requests.post('https://accounts.baidu.com/login', data={'form_email': '[email protected]', 'form_password': '123456'})
如果要传递JSON数据,可以直接传入json参数:
params = {'key': 'value'}
r = requests.post(url, json=params) // 内部自动序列化为JSON
3、上传文件,在读取文件时,注意务必使用’rb’即二进制模式读取,这样获取的bytes长度才是文件的长度。
upload_files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=upload_files)
r.headers //获取请求响应头
r.cookies['ts'] //获取指定cookie
//请求时传入cookie
cs = {'token': '12345', 'status': 'working'}
r = requests.get(url, cookies=cs)
r = requests.get(url, timeout=2.5) # 2.5秒后超时