廖雪峰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&nbsp;tutorial...<br>END</p>
# </body></html>''')

在这里插入图片描述
学习笔记day13

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值