six: Python2和3的兼容库
Six 提供了一些简单的工具用来封装 Python 2 和 Python 3 之间的差异性
Six provides simple utilities for wrapping over differences between Python 2 and Python 3.
The name, “six”, comes from the fact that 2*3 equals 6. Why not addition? Multiplication is more powerful, and, anyway, “five” has already been snatched away.
参考:http://www.itpub.net/thread-1709185-1-1.html
uuid: Python使用UUID库生成唯一ID
UUID是128位的全局唯一标识符,通常由32字节的字符串表示。可以保证时间和空间的唯一性。它通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。
公司:uuid.uuid4().hex 由伪随机数得到,有一定的重复概率,该概率可以计算出来。 .hex是16进制
延展:
Python使用UUID库生成唯一ID
python中hex,oct,chr,ord函数讲解
UUID 和 GUID 的区别
random
http://blog.youkuaiyun.com/daduryi/article/details/77417509我自己的#随机#
json
json_str = json.dumps(obj) obj = json.loads(json_str)
json.dump(obj, f) obj = json.load(f) obj
dumps的参数separators=(‘,’, ‘:’)紧凑型jison,boqing在搞universilink时只能解析紧凑的
platform
platform.system() == ‘Linux’
traceback
traceback.format_exc()
request
base64
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法;Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息;
优点:速度快,ascii字符,肉眼不可理解
缺点:编码比较长,非常容易被破解,仅适用于加密非关键信息的场合
>>> import base64
>>> s = '我是字符串'
>>> a = base64.b64encode(s)
>>> print a
ztLKx9fWt/u0rg==
>>> print base64.b64decode(a)
我是字符串
Python:字符串
http://blog.youkuaiyun.com/daduryi/article/details/71158303 后期搬出去
如何去掉字符串中不需要的字符strip(‘-+*’)/lstrip()/rstrip()/切片分段+/replace/sub/translate
'/'.join([QiniuUtil.CDN_URL, path]) #sub
s.split(sep=None, maxsplit=-1) #以sep为参数对字符串切割(默认为空格),返回list #注意 ''.split(',')返回['']
s.strip('xx') # 去除s前后的xx,默认为空格 lstrip('xx')、rstrip('xx'),当要去除的为’_medal’时,会出问题,是下划线的锅
future
from future import absolute_import
这样局部导入就不会覆盖全局导入,本地导入采用相对引用
from .celery import Celery # 是导入当前路径下celery的Celery
from celery import Celery # 是导入第三方的全局的celery模块下的Celery
datetime
http://blog.youkuaiyun.com/daduryi/article/details/77418000我自己的#时间#
time
http://blog.youkuaiyun.com/daduryi/article/details/77418000我自己的#时间#
argparse
argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数,例如python parseTest.py input.txt output.txt –user=name –port=8080。
[简书]argparser模块学习
requests
使用 Requests 发送网络请求
http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
1. 返回的responses对象
r = requests.get(‘url’)会返回一个response对象. 该url必须把http等写上
r的常用方法或属性有:
r.json()有一个内置的 JSON 解码器
r.content 以字节的方式访问请求响应体,对于非文本请求
r.text 根据r.encoding的值自动解码, 并返回响应内容,大多数 unicode 字符集都能被无缝地解码
r.url
r.request 返回请求方式
r.status_code响应状态码r.status_code == requests.codes.ok, 如果发送了一个错误请求(一个 4XX 客户端错误,或者 5XX 服务器错误响应),我们可以通过 Response.raise_for_status() 来抛出异常
r.ok
r.reason
r.headers 字典, 且key的大小写不敏感
r.cookies 获得响应的cookies, 字典
r.apparent_encoding显示返回的编码
r.historyRequests 会自动处理所有重定向。可以使用响应对象的 history 方法来追踪重定向。从老到近.
2. 发送请求
r = requests.get(‘url’)
POST, PUT,DELETE,HEAD 以及 OPTIONS
3. 传递url参数
url?参数, headers
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>>headers = {'user-agent': 'my-app/0.0.1'}
>>> r = requests.get("http://httpbin.org/get", params=payload(参数), headers=headers(头), data=payload(POST), json=payload(json), cookies=cookies(字典))
timeout=设置超时,生产环境必须有
allow_redirects=False, 禁止重定向
还可以传文件,
**Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但界面更为完整,适合跨域名跨路径使用。你还可以把 Cookie Jar 传到 Requests 中
**你还可以为 data 参数传入一个元组列表。在表单中多个元素使用同一 key 的时候,这种方式尤其有效, payload = ((‘key1’, ‘value1’), (‘key1’, ‘value2’))
**headers的坑有.netrc, 重定向, 代理授权
**在罕见的情况下,你可能想获取来自服务器的原始套接字响应,那么你可以访问 r.raw。 如果你确实想这么干,那请你确保在初始请求中设置了 stream=True。
4. 错误与异常
遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出一个 ConnectionError 异常。
如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status() 会抛出一个 HTTPError 异常。
若请求超时,则抛出一个 Timeout 异常。
若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。
所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException 。
5. 高级用法: 会话/ssl证书验证/响应体内容工作流/持久连接/流式上传下载/块编码/事件挂钩/身份验证/代理/阻塞与非阻塞/等等
http://docs.python-requests.org/zh_CN/latest/user/advanced.html#advanced
StringIO和BytesIO
This module implements a file-like class, StringIO, that reads and writes a string buffer (also known as memory files). See the description of file objects for operations (section File Objects)
很多时候,数据读写不一定是文件,也可以在内存中读写。
将像文本一样使用StringIO对其进行处理,而二进制则使用BytesIO
from io import StringIO, BytesIO
output = StringIO()
output.write('First line.\n')
......
StringIO还有一个对应的c语言版的实现,它有更好的性能,但是稍有一点点的区别,cStringIO没有len和pos属性。(还有,cStringIO不支持Unicode编码)
在python2.x中导入模块方法:
from StringIO import StringIO
在python2.x中它还有个孪生兄弟,运行速度比它快,用c实现的
from cStringIO import StringIO
在python3.x中,StringIO已经在io模块中了,导入方法
from io import StringIO (推荐用)
PlL
简单入门 建议所有图片处理都try起来, 没有save的用with Image.open(infile) as im:包起来
官方英文4.Xhttps://pillow.readthedocs.io/en/4.3.x/handbook/tutorial.html
官方中文V2.4.0http://pillow-cn.readthedocs.io/zh_CN/latest/index.html
from PIL import Image
Image.open(infile.jpg).save(outfile.png) # 转码
im.thumbnail(size) # 缩略图
print(infile, im.format, "%dx%d" % im.size, im.mode) # 图片信息
region = im.crop(box) # 复制出一块, 有惰性 有时需要结合im.load()
region = region.transpose(Image.ROTATE_180) # 处理(转动)
im.paste(region, box) # 粘贴
r, g, b = im.split(); im = Image.merge("RGB", (b, g, r))# 变色(滤镜差不多)
out = im.resize((128, 128)) #重置宽高
out = im.rotate(45) # degrees counter-clockwise #旋转(逆时针)
out = im.transpose(Image.FLIP_LEFT_RIGHT) # 换位
out = im.transpose(Image.FLIP_TOP_BOTTOM)
out = im.transpose(Image.ROTATE_90)
out = im.transpose(Image.ROTATE_180)
out = im.transpose(Image.ROTATE_270)
im = Image.open("hopper.ppm").convert("L") # Color transforms (modes)
Image enhancement图片增强
这里写代码片