|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 py大神 于 2017-12-24 14:38 编辑
第三十一讲:
pickle模块。#pickle:泡菜
这个模块可以把Python的所用对象都转换成二进制的形式存放字节流。这个过程我们称之为存放:pickling。那么把二进制转换成对象就是读取:unpickling。
方法:- >>> import pickle
- >>> mylist = [1,2,3]
- >>> pickle.file = open('mylist','wb')
- >>> pickle_file = open('mylist','wb')
- >>> pickle.dump(mylist,pickle_file)
- >>> pickle.close()
- Traceback (most recent call last):
- File "<pyshell#11>", line 1, in <module>
- pickle.close()
- AttributeError: module 'pickle' has no attribute 'close'
- >>> pickle_file.close()
- >>> pickle_file = open('mylist','rb')
- >>> mylist2 = pickle.load(pickle_file)
- >>> mylist2
- [1, 2, 3]
- >
复制代码
本节课有天气程序
第三十二讲:
主要介绍了错误的类型,总结见本专辑其他帖子。
第三十三讲:
try:
要进行错误捕捉的代码
当某行代码出错后,不再执行下面的代码,直接跳到except语句
except 错误类型 as 变量名:
捕捉错误后执行的代码
finally:
无论如何都会执行的代码
raise 异常名字
引发一个异常。
如:- >>> raise
- Traceback (most recent call last):
- File "<pyshell#2>", line 1, in <module>
- raise
- RuntimeError: No active exception to reraise
- >>> raise ZeroDivisionError('除数为零')
- Traceback (most recent call last):
- File "<pyshell#1>", line 1, in <module>
- raise ZeroDivisionError('除数为零')
- ZeroDivisionError: 除数为零
复制代码
异常解释可以定制
第三十四讲:
丰富的else语句和简洁的with语句
第三十六讲:类和对象
假如有一些数据,有一个函数,这个函数调用这些数据,那么把这些数据和这个函数封装进一个类(class),那么这些数据就是类的属性,函数就是类的方法
即:类=属性+方法
self参数:类中的方法函数必须有self参数,因为在实例化一个类的时候,实例化对象会将自身作为self参数代入方法函数,因为一个类可以实例化很多个对象,当多个对象同时调用相同的方法却传进去不同的参数的时候,python就会不知道是哪个对象要
Python的魔法方法:总是被双下划线包围
__init__(self)方法:构造方法
当实例化一个对象的时候,那么这个方法就会在对象被创建的时候自动调用
第五十四讲:爬虫————实战
urlopen()函数既可以是一个URL字符串,也可以是一个Request对象
如:作为Request对象
- import urllib.request
- req = urllib.request.Request('http://placekitten.com/g/500/600')#实例化Request对象
- response = urllib.request.urlopen(req)#将Request对象传进去
- cat_jpg = response.read()
- with open('cat_500_600','wb') as f:
- f.write(cat_jpg)
复制代码
如:作为URL字符串
- import urllib.request
- response = urllib.request.urlopen('http://placekitten.com/g/500/600')#作为URL字符串传入进去
- cat_jpg = response.read()
- with open('cat_500_600','wb') as f:
- f.write(cat_jpg)
复制代码
getinfo()方法得到一个HTTPMesagge对象
- >>> response.info()
- <http.client.HTTPMessage object at 0x0000020F5B491160>
复制代码
打印出来:
- >>> print(response.info())
- Date: Wed, 20 Dec 2017 12:30:16 GMT
- Content-Type: image/jpeg
- Content-Length: 26590
- Connection: close
- Set-Cookie: __cfduid=db50565700b9545274517be67286d4a0b1513773016; expires=Thu, 20-Dec-18 12:30:16 GMT; path=/; domain=.placekitten.com; HttpOnly
- Accept-Ranges: bytes
- X-Powered-By: PleskLin
- Access-Control-Allow-Origin: *
- Cache-Control: public
- Expires: Thu, 31 Dec 2020 20:00:00 GMT
- Server: cloudflare-nginx
- CF-RAY: 3d029ca760149613-SJC
复制代码
包含了远程服务器反悔的header信息
比如:Server: cloudflare-nginx就是服务器名称
getcode()得到HTTP的状态码,200则表示OK
- >>> response.getcode()
- 200
复制代码
——————————————————————爬有道词典————————————————————————
encode()把Unicode转换成其他形式
如:- encode('utf-8')#把Unicode转换成utf-8
复制代码
decode()把其他转换成utf-8模式,方法同上
json结构:是一种轻量级的数据交换结构,就是用字符串的形式把Python的数据结构封装起来
————————————————编码问题——————————————
Unicode 编码系统的发明是为了统一各国文字的编码,因此把它称为万国码。Unicode 为每种语言设置了唯一的二进制编码表示方式,也就是说无论哪个国家的语言,都可以在 Unicode 上找到对应的代码。因此,当不同的编码系统进行相互转换的时候,可以利用 Unicode 做一个“中介”。
其他编码系统到 Unicode 的转换过程我们称为解码(decode),将 Unicode 转换为其他编码系统的过程称之为编码(encode)。例如 A 编码需要转换为 B 编码,过程如下:
A编码 -> decode(A) -> Unicode -> encode(B) -> B 编码
第五十七讲:
正则表达式:
search方法:从用于在字符串中搜索正则表达式第一次出现的位置。需要搜索的字符串需要用原始字符串。
. 正则表达式的通配符。找到除了换行符以外的任何字符
\d 用来匹配任何数字
字符类:用中括号 [] 括起来要匹配的字符串
匹配次数:在要匹配的字符后加 {次数范围}
^ 脱字符,要求要匹配的字符必须在开始位置。只有放在开始处才有作用,放其他位置表示其本身
如:- >>> re.search('^fishc','i love fishc')#这里因为fishc没有在 i love fishc 的开始位置,所以匹配不到
- >>> re.search('^fishc','fishc,i,love')
- <_sre.SRE_Match object; span=(0, 5), match='fishc'>
- >>>
复制代码
$ 要求必须在结束的位置。同上。
如:- >>> re.search('fishc
- [] 和反斜杠的作用差不多,不过可以转义多个字符。但是 - 和 \ 和 ^ 不可转义
- 用括号 () 可以打包多个
- 贪婪模式:即尽可能多的匹配
- 如:[code]>>> a = '<asd><gasdg><adsa><asd><asd>'
- >>> re.search(r'<.+>',a)
- <_sre.SRE_Match object; span=(0, 28), match='<asd><gasdg><adsa><asd><asd>'>
- >>>
复制代码
这里因为贪婪模式下,会一直往后查找>找到最后一个>的时候停止并返回
所以返回了整个字符串
非贪婪模式:
如:- >>> re.search(r'<.+?>',a)
- <_sre.SRE_Match object; span=(0, 5), match='<asd>'>
- >>>
复制代码
加上问号即可,搜索到第一个符合正则表达式的字符串后就返回,所以返回的是第一个<>内的内容,'i love fishc')
<_sre.SRE_Match object; span=(7, 12), match='fishc'>
>>> re.search('fishc
[] 和反斜杠的作用差不多,不过可以转义多个字符。但是 - 和 \ 和 ^ 不可转义
用括号 () 可以打包多个
贪婪模式:即尽可能多的匹配
如:- >>> a = '<asd><gasdg><adsa><asd><asd>'
- >>> re.search(r'<.+>',a)
- <_sre.SRE_Match object; span=(0, 28), match='<asd><gasdg><adsa><asd><asd>'>
- >>>
复制代码
这里因为贪婪模式下,会一直往后查找>找到最后一个>的时候停止并返回
所以返回了整个字符串
非贪婪模式:
如:- >>> re.search(r'<.+?>',a)
- <_sre.SRE_Match object; span=(0, 5), match='<asd>'>
- >>>
复制代码
加上问号即可,搜索到第一个符合正则表达式的字符串后就返回,所以返回的是第一个<>内的内容,'fishc,i,love')#这里fishc没有在fishc,i,love的最后位置,所以匹配不到
>>> [/code]
[] 和反斜杠的作用差不多,不过可以转义多个字符。但是 - 和 \ 和 ^ 不可转义
用括号 () 可以打包多个
贪婪模式:即尽可能多的匹配
如:
这里因为贪婪模式下,会一直往后查找>找到最后一个>的时候停止并返回
所以返回了整个字符串
非贪婪模式:
如:
加上问号即可,搜索到第一个符合正则表达式的字符串后就返回,所以返回的是第一个<>内的内容 |
|