| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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] 
 
        []        和反斜杠的作用差不多,不过可以转义多个字符。但是        -        和        \        和        ^        不可转义 
 
用括号        ()                可以打包多个 
 
贪婪模式:即尽可能多的匹配 
如: 
这里因为贪婪模式下,会一直往后查找>找到最后一个>的时候停止并返回 
所以返回了整个字符串 
非贪婪模式: 
如: 
加上问号即可,搜索到第一个符合正则表达式的字符串后就返回,所以返回的是第一个<>内的内容 |   
 
 
 
 |