廖雪峰Python学习笔记day12
学习笔记day11
# python study day12
# itertools 模块提供迭代功能处理函数,返回值是Iterator,用循环迭代计算输出
# 1、count() 无限自然数序列迭代器
# import itertools
# ct = itertools.count(33)
# for per in ct:
# print(per) # 33 34 …
# 2、cycle() 固定序列无限重复
# import itertools
# cc = itertools.cycle('abc')
# for per in cc:
# print(per) # a b c a b …
# 3、repeat 元素无限重复,提供第二个参数限定重复次数
# import itertools
# re = itertools.repeat('ac', 3)
# for per in re:
# print(per) # ac ac ac
# 3、chain() 串联迭代对象
# import itertools
# for per in itertools.chain('abc', 'xyz'):
# print(per) # a b c x y z
# 4、groupby() 将重复元素分组, 也可添加类似map中间处理函数
# import itertools
# for key, group in itertools.groupby('aAbBBcc', lambda c: c.lower()):
# print(key, list(group))
# # a ['a', 'A']
# # b ['b', 'B', 'B']
# # c ['c', 'c']
# ' 计算pi的值 '
# # step 1: 创建一个奇数序列: 1, 3, 5, 7, 9, ...
# # step 2: 取该序列的前N项: 1, 3, 5, 7, 9, ..., 2*N-1.
# # step 3: 添加正负符号并用4除: 4/1, -4/3, 4/5, -4/7, 4/9, ...
# # step 4: 求和:
# import itertools
# # from functools import reduce
# cc = itertools.count(1, 2)
# List = []
# for c in cc:
# l = len(List)
# if l > 1001:
# break
# List.append((4 * pow(-1, l) / c))
# # result = reduce(lambda x, y: x+y, List)
# result = sum(List)
# print(result)
# with open('/path/file', 'r') as f:… 语句,
# 需要实现上下文__enter__和__exit__方法才能使用
# class Query(object):
# def __init__(self, name):
# self.name = name
# def __enter__(self):
# print('Begin')
# return self
# def __exit__(self, exc_type, exc_value, traceback):
# if exc_type:
# print('error')
# else:
# print('end')
# def query(self):
# print('query info about %s ' % self.name)
# with Query('Alice') as q:
# q.query()
# # Begin
# # query info about Alice
# # end
# contextlib标准库提供了更简便的写法 @contextmanager
# from contextlib import contextmanager
# class Query(object):
# def __init__(self, name):
# self.name = name
# def query(self):
# print('query info about %s ' % self.name)
# @contextmanager
# def create_query(name):
# print('begin')
# q = Query(name)
# yield q # yield上半部分是__enter__,下半部分是__exit__
# print('end')
# from contextlib import contextmanager
# @contextmanager
# def tag(name):
# print('<%s>' % name)
# yield
# print('</%s>' % name)
# with tag('h1'):
# print('\thello')
# print('\tworld')
# # <h1>
# # hello
# # world
# # </h1>
# @closing 可以使用closing()把对象变成上下文对象
# from contextlib import closing
# from urllib.request import urlopen
# with closing(urlopen('https://www.pyhton.org')) as page:
# for line in page:
# print(line)
# urllib 提供各种请求URL操作,可以通过请求头伪装成浏览器发出请求
# GET 请求
# from urllib import request
# with request.urlopen('http://localhost:8888/maven-ssm/newShow') 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'))
# status: 200
# Content-Type application/json;charset=utf-8
# Transfer-Encoding chunked
# Date Fri, 04 Dec 2020 03:50:59 GMT
# Connection close
# data: "{\"code\":0,\"sta……\"}"
# 在Request对象添加HTTP头,模拟iPhone6发送请求
# 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:
# print('status:', f.status, f.reason)
# for k, v in f.getheaders():
# print('%s %s' % (k, v))
# print('data:', f.read().decode('utf-8'))
# # <meta charset="UTF-8">
# # <title>豆瓣(手机版)</title>
# # <meta name="google-site-verification" content="ok0wCgT……
# Post 请求,把参数data以bytes形式传入
# from urllib import request, parse
# data = parse.urlencode([
# ('username', 'email'),
# ('password', 'passwd')
# ])
# 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'))
# Handler 利用ProxyHandler 通过Proxy 访问网站
# url = {'http': 'http://www.example.com:3128/'}
# proxy_handler = urllib.request.ProxyHandler(url)
# proxy_auth_handler = urllib.request.ProxyBasicAuthHandler()
# proxy_auth_handler.add_password('realm', 'host', 'username', 'password')
# opener = urllib.request.build_opener(proxy_handler, proxy_auth_handler)
# with opener.open('http://www.example.com/login.html') as f:
# pass
# from urllib import request
# import json
# def fetch_data(url):
# req = request.Request(url)
# with request.urlopen(req) as f:
# data = f.read()
# return json.loads(data.decode('utf-8'))
# URL = 'http://www.httpbin.org/get'
# data = fetch_data(URL)
# print(data)
# XML解析。DOM:将整个XML读入内存、SAX:流模式,边读边解析(推荐)
# SAX通过 start_element、end_element、char_data 函数解析xml
# from xml.parsers.expat import ParserCreate
# class DefaultSaxHandler(object):
# def start_element(self, name, attrs):
# print('sax:start_element: %s, attrs: %s' % (name, str(attrs)))
# def end_element(self, name):
# print('sax:end_element: %s' % name)
# def char_data(self, text):
# print('sax:char_data: %s' % text)
# xml = r'''<?xml version="1.0"?>
# <ol>
# <li><a href="/python">Python</a></li>
# <li><a href="/ruby">Ruby</a></li>
# </ol>
# '''
# handler = DefaultSaxHandler()
# parser = ParserCreate()
# parser.StartElementHandler = handler.start_element
# parser.EndElementHandler = handler.end_element
# parser.CharacterDataHandler = handler.char_data
# parser.Parse(xml)
# HTMLParser 可以将html页面中的文本、图像等解析出来
# from html.parser import HTMLParser
# from html.entities import name2codepoint
# class MyHTMLParser(HTMLParser):
# 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>''')
学习笔记day13
还没有评论,来说两句吧...