介绍python的几个內建模块,原文链接

1 python的时间模块datetime

取现在时间

from datetime import datetime
now = datetime.now()
print(now)
print(type(now))

  

将指定日期转化为时间戳

from datetime import datetime
dt = datetime(2017,12,13,13,7)
# 把datetime转换为timestamp
print( dt.timestamp() )

  

将时间戳转化为日期

from datetime import datetime
t = 1429417200.0
print(datetime.fromtimestamp(t))

  

根据时间戳转化为本地时间和utc时间

from datetime import datetime
t = 1429417200.0
# 本地时间
print(datetime.fromtimestamp(t))
# UTC时间
print(datetime.utcfromtimestamp(t))

  

将字符串转化为时间

from datetime import datetime
cday = datetime.strptime('2017-6-1 18:22:22','%Y-%m-%d %H:%M:%S')
print(day)

  

将时间戳转化为字符串

from datetime import datetime
now = datetime.now()
print(now.strftime('%a,%b %d %H:%M'))

  

时间加减

from datetime import datetime , timedelta
now = datetime.now()
print( now )
print(now + timedelta(hours = 10))
print(now + timedelta(days = 1))
print(now + timedelta(days = 2, hours = 12))

  

设置时区

from datetime import datetime, timedelta, timezone
# 创建时区UTC+8:00
timezone_8 = timezone(timedelta(hours = 8) )
now = datetime.now()
print(now)
# 强制设置为UTC+8:00
dt = now.replace(tzinfo=timezone_8)
print(dt)

  

获取utc时区和时间,并且转化为别的时区的时间

12345678910111213
from datetime import datetime, timedelta, timezone

# 拿到UTC时间,并强制设置时区为UTC+0:00:utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)print(utc_dt)bj_dt = utc_dt.astimezone(timezone(timedelta(hours = 8) ))print(bj_dt)

tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours = 9) ) )print(tokyo_dt)

tokyo_dt2 = bj_dt.astimezone(timezone(timedelta(hours = 9) ) )print(tokyo_dt2)

2命名tuple

123456789101112131415161718
#可命名tuplefrom collections import namedtuplePoint = namedtuple('Point', ['x','y'])p = Point(1,2)print(p.x)

from collections import dequeq = deque(['a','b','c'])q.append('x')q.appendleft('y')print(q)

from collections import defaultdictdd = defaultdict(lambda:'N/A')dd['key1']='abc'print(dd['key1'])print(dd['key2'])

3顺序字典

12345678
from collections import OrderedDictd = dict([ ['a',1], ['b',2],['c',3]])print(d)od = OrderedDict([('a',1),('b',2),('c',3)])print(od)

od2 = OrderedDict([['Bob',90],['Jim',20],['Seve',22]])print(od2)

4计数器

12345
from collections import Counterc = Counter()

for ch in 'programming': c[ch]=c[ch]+1

5 itertools

从一开始生成自然数

12345
#itertools.count(start , step)import itertoolsnatuals = itertools.count(1)for n in natuals: print(n)

在生成的可迭代序列中按规则筛选

1234
natuals = itertools.count(1)ns = itertools.takewhile(lambda x: x <= 10, natuals)print(ns)print(list(ns) )

将两个字符串生成一个序列

1234
for c in itertools.chain('ABC','XYZ'): print(c)

print(list(itertools.chain('ABC','XYZ')) )

迭代器把连续的字母放在一起分组

123456
for key, group in itertools.groupby('AAABBBCCAAA'):  print(key, list(group)) print(key, group)

for key, group in itertools.groupby('AaaBBbcCAAa', lambda c: c.upper() ): print(key,list(group))

6 contextmanager

open 返回的对象才可用with,或者在类中实现enterexit可以使该类对象支持with用法

123456789101112131415161718192021
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('BBBB') as q: if q: q.query()

简单介绍下原理

123456
with EXPR as VAR:实现原理:在with语句中, EXPR必须是一个包含__enter__()和__exit__()方法的对象(Context Manager)。调用EXPR的__enter__()方法申请资源并将结果赋值给VAR变量。通过try/except确保代码块BLOCK正确调用,否则调用EXPR的__exit__()方法退出并释放资源。在代码块BLOCK正确执行后,最终执行EXPR的__exit__()方法释放资源。

通过python提供的装饰器contextmanager,作用在生成器函数,可以达到with操作的目的

123456789101112131415161718
from contextlib import contextmanagerclass Query(object): def __init__(self, name): self.name = name

 def query(self): print('Query info about %s ...' %self.name)

@contextmanagerdef create_query(name): print('Begin') q = Query(name) yield q print('End')

with create_query('aaa') as q: if q: print(q.query())

可以看看contextmanager源码,了解下

12345678910111213141516171819202122232425262728293031323334353637383940
class GeneratorContextManager(object): def __init__(self, gen): self.gen = gen

 def __enter__(self): try: return self.gen.next() except StopIteration: raise RuntimeError("generator didn't yield")​ def __exit__(self, type, value, traceback): if type is None: try: self.gen.next() except StopIteration: return else: raise RuntimeError("generator didn't stop") else: try: self.gen.throw(type, value, traceback) raise RuntimeError("generator didn't stop after throw()") except StopIteration: return True except: # only re-raise if it's *not* the exception that was # passed to throw(), because __exit__() must not raise # an exception unless __exit__() itself failed. But # throw() has to raise the exception to signal # propagation, so this fixes the impedance mismatch  # between the throw() protocol and the __exit__() # protocol. # if sys.exc_info()[1] is not value: raise​def contextmanager(func): def helper(*args, **kwds): return GeneratorContextManager(func(*args, **kwds)) return helper

也可以采用closing用法作用在一个对象上支持with open操作

123456
from contextlib import closingfrom urllib.request import urlopen

with closing(urlopen('https://www.python.org')) as page: for line in page: print(line)

介绍下closing 实现原理

123456
@contextmanagerdef closing(thing): try: yield thing finally: thing.close()

同样可以用contextmanager实现打印指定标签的上下文对象

123456789
@contextmanagerdef tag(name): print("<%s>" % name) yield print("</%s>" % name)

with tag("h1"): print("hello") print("world")

上述代码执行结果为:

123456789
<h1>helloworld</h1>代码的执行顺序是:

with语句首先执行yield之前的语句,因此打印出<h1>;yield调用会执行with语句内部的所有语句,因此打印出hello和world;最后执行yield之后的语句,打印出</h1>。

7 urllib库

这是个非常重要的库,做爬虫会用到

采用urllib get网页信息

1234567
from urllib import request with request.urlopen('http://www.limerence2017.com/') 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') )

在request中添加信息头模拟浏览器发送请求

123456789101112131415161718192021222324
from urllib import requestreq = 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'))

from urllib import request, parseprint('Login to weibo.cn...')email = input('Email: ')passwd = input('Password: ')login_data = parse.urlencode([ ('username', email), ('password', passwd), ('entry', 'mweibo'), ('client_id', ''), ('savestate', '1'), ('ec', ''), ('pagerefer', 'https://passport.weibo.cn/signin/welcome?entry=mweibo&r=http%3A%2F%2Fm.weibo.cn%2F')])

采用post方式获取信息, request.urlopen(),参数可以携带data发送给网址

123456789101112131415161718192021222324
print('Login to weibo.cn...')email = input('Email: ')passwd = input('Password: ')login_data = parse.urlencode([ ('username', email), ('password', passwd), ('entry', 'mweibo'), ('client_id', ''), ('savestate', '1'), ('ec', ''), ('pagerefer', 'https://passport.weibo.cn/signin/welcome?entry=mweibo&r=http%3A%2F%2Fm.weibo.cn%2F')])

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'))

采用代理方式获取网页信息

12345678910111213
proxy_handler = urllib.request.ProxyHandler({'http': 'http://www.example.com:3128/'})proxy_auth_handler = urllib.request.ProxyBasicAuthHandler()proxy_auth_handler.add_password('realm', 'host', 'username', 'password')opener = urllib.request.bulid_opener(proxy_handler, proxy_auth_handler)with opener.open('http://www.example.com/login.html') as f: pass

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

我的公众号:

转载于:https://www.cnblogs.com/secondtonone1/p/8067619.html

python学习(十五) 内建模块学习相关推荐

  1. Python学习笔记:常用内建模块7XML

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  2. Python学习笔记:常用内建模块5

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  3. Python学习笔记:常用内建模块2:collections

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. python的标准类型内建模块有_python的常用内建模块与常用第三方模块

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一.常用内置模块 1.datetime Python 提供了一个 time 和 calendar 模 ...

  5. Python常用内建模块——学习笔记

    1.datetime:Python处理日期和时间的标准库 引入方法: from datetime import datetime. 第一个datetime是模块,第二个datetime是类. 如果仅导 ...

  6. python内置模块re_Python常用内建模块-re模块(正则表达式)

    正则表达式须知正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我们想要从返回的页面内容提取出我们想要的内容就易如反掌了.正则 ...

  7. Python学习笔记:常用内建模块6 (urllib)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  8. Python学习笔记:常用内建模块4:hmac

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  9. Python学习笔记:常用内建模块3:struct

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

最新文章

  1. “深度学习不能拿来乱用”,Nature论文引发激烈争论
  2. CentOS 7 安装 Greenplum6 (附 dotNET Core 示例)
  3. vant input框禁止调用手机键盘_【案例分享】适应网银等密码键盘的解决方案
  4. Xshell连接Ubuntu时提示SSH服务器拒绝了密码
  5. Ansible Privilege Escalation
  6. python入门代码大全-python入门代码指南教程书籍推荐2020总结全集汇总
  7. SYNPROXY:廉价的抗 DoS 攻击方案
  8. double、float、long占几个字节?
  9. 阿里云营收结构和基础设施规模
  10. 语音信号预加重及matlab实现
  11. 白盒测试用例设计方法(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖、基本路径覆盖)
  12. Linux服务篇之SSH服务
  13. 什么是数据库防火墙 数据库防火墙作用是什么
  14. 《Java语言程序设计与数据结构》编程练习答案(第三章)(三)
  15. 2022年 AI 技术成熟度曲线
  16. 软考中级选哪个比较合适?
  17. 超详细:R语言缺失值及异常值处理
  18. Error: [$injector:unpr] AngularJS 注入报错
  19. 今天没有收到农行的笔试通知
  20. 关于C语言的优秀文章

热门文章

  1. AntDesign tooltip组件异步显示错位问题
  2. 渗透测试——提权方式总结
  3. java字节码的扩展名_什么是字节码?字节码扩展名是什么?
  4. c语言多进程编程,C语言中的多进程
  5. 关于微软账号登录不上问题
  6. 阿里巴巴/166获得店铺的所有商品 API使用说明
  7. 《动手玩转Arduino》——11.1 作品37:在面包板上做自己的Arduino
  8. 破解滑动验证码,成功率在百分之九十九
  9. ubuntu如何安装壁纸软件Hydra Paper
  10. no suitable driver mysql_java连接mySQL的问题,报错No suitable driver found for jdbc:mysql: