python 之常用模块
一 认识模块
二 常用模块
(1)re模块
(2)collections模块
一 认识模块
(1)什么是模块
(2)模块的导入和使用
(1)模块是:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。
但其实import加载的模块分为四个通用类别:
1 使用python编写的代码(.py文件)
2 已被编译为共享库或DLL的C或C++扩展
3 包好一组模块的包
4 使用C编写并链接到python解释器的内置模块
为什么要使用模块?
如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。
随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用,
(2)模块的导入和使用
更多内容:http://www.cnblogs.com/Eva-J/articles/7292109.html
二 常用模块
re 模块
引入通过一个京东的注册例子来引入:https://reg.jd.com/reg/person?ReturnUrl=https%3A//www.jd.com
如果我们在电话号码那一栏随便写上‘11111111111’它会给出格式错误
这个功能是怎样实现的呢?
假如现在你用python写一段代码,类似:
phone_number = input('please input your phone number : ')
如何判断输入的电话号码是合法的?
根据手机号码一共11位并且是以13、14/15/17/18开头的数字这些特点,我们用python可以写了如下代码:
import re
while True:
phone_number = input('please input your phone number : ')
if len(phone_number) == 11 \
and phone_number.isdigit()\
and (phone_number.startswith('') \
or phone_number.startswith('') \
or phone_number.startswith('') \
or phone_number.startswith('')\
or phone_number.startswith('')):
print('是合法的手机号码')
else:
print('不是合法的手机号码'):
优化后的代码是:
import re
while True:
phone_number=input('please input your phone number:')
if re.match('^(13|14|15|18|17)[0-9]{9}$',phone_number):
print('是合法的手机号码')
else:
print('不是合法的手机号码')
re模块 和 正则表达式
他俩的关系:不管你以后是不是去做python开发,只要你是一个程序员就应该了解正则表达式的基本使用。如果未来你要在爬虫领域发展,你就更应该好好学习这方面的知识。
但是re模块本质上和正则表达式没有一毛钱的关系。re模块和正则表达式的关系,类似于time模块和时间的关系
时间有自己的格式,年月日使分秒,12个月。。。。已经成为了一种规格。time模块只不过是python提供给我们的可以方便我们操作时间的一个工具而已。
正则表达式:是匹配字符串内容的一种规则。
定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来报答对字符串的一种过滤逻辑。
正则表达式的在线测试工具http://tool.chinaz.com/regex/
我们谈到正则表达式都是跟字符串有关系。在线测试工具里,你输入的每一个字都是一个字符串。其次,如果在一个位置的一个值,不会出现什么变化,那么是不需要规则的。
如果你要用‘1’去匹配‘1’,或者用‘2’去匹配‘2’,直接可以匹配上。这些事不需要高深的理论。
那么在之后我们要更多考虑的是在同一个位置上 可以出现的字符范围。
字符组:[字符组]
在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示
字符分为很多类,数字、字母、标点等等。
假如你现在要求一个位置‘只能出现一个数字’,那么这个位置上的字符只能是0、1........9这个10个数之一。










re 模块的应用
import re
# ret=re.findall('a','eval agen heh')
# print(ret)
# ret=re.search('a','aval egon hah ')
# print(ret.group)
# ret=re.match('a','agon avel haha').group()
# print(ret)
# ret=re.split('[ab]','abcd')
# print(ret)
# ret=re.sub('\d','H','123abade456')
# print(ret)
# ret=re.subn('\d','H','123abade456')
# print(ret)
# obj=re.compile('\d{3}')
# ret=obj.search('adajfafg123wwww')
# print(ret.group())
# ret=re.finditer('\d','daohgaljflahgl123456aoafhlfjaljf')
# print(ret)
# print(next(ret).group())
# print(next(ret).group())
findall的优先级
import re
ret=re.findall('www.(baidu|oldboy).com','www.oldboy.com')
print(ret)
ret=re.findall('www.(?:baidu|oldboy).com','www.oldboy.com')
print(ret)
split的加括号和不加括号的区别
import re
# ret=re.split('\d+','afljalfjlajgl123465ddiei145q')
# print(ret)
# ret=re.split('(\d+)','afljalfjlajgl123465ddiei145q')
# print(ret)
在匹配部分加上括号可以保留分割的数字这个在某些时候特别重要。
在匹配部分不加括号就不会保留分割的数字。
练习题:
匹配标签
import re
ret=re.search('<(?P<tag_name>\w+)>\w+</(?P=tag_name)>','<h1>hello</h1>')
print(ret.group())
ret=re.search(r'<(\w+)>\w+</\1>','<h1>hello</h1>')
print(ret.group(1))
匹配整数
import re
# ret=re.findall('\d+','1 - 2 * ( (60-30 +(-40.36/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2)')
# print(ret)
# ret=re.findall(r'-?\d+\.\d*|(-?\d+)','1 - 2 * ( (60-30 +(-40.36/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2)')
# print(ret)
# ret.remove('')
# print(ret)
数字匹配
import re
# while True:
# s=input('>>请输入月份:').strip()
# if re.match('(^(0?[1-9]|1[0-2])$)',s):
# print('输入月份正确')
# else:
# print('格式不正确') # while True:
# s=input('>>请输入qq号:').strip()
# if re.match('^[1-9][0-9]{4,}$',s):
# print('输入格式正确')
# else:
# print('格式不正确') # while True:
# s=input('>>请输入一个浮点数:').strip()
# if re.match('^(-?\d+)(\.\d*)?$',s):
# print('输入格式正确')
# else:
# print('格式不正确') # while True:
# s=input('>>请输入一个汉字:').strip()
# if re.match('^[\u4e00-\u9fa5]{0,}$',s):
# print('输入格式正确')
# else:
# print('格式不正确')
爬虫练习
import requests
import re
import json def getPage(url):
response = requests.get(url)
return response.text def parsePage(s):
com = re.compile(
'<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>\d+).*?<span class="title">(?P<title>.*?)</span>'
'.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>', re.S) ret = com.finditer(s)
for i in ret:
yield {
"id": i.group("id"),
"title": i.group("title"),
"rating_num": i.group("rating_num"),
"comment_num": i.group("comment_num"),
} def main(num):
url = 'https://movie.douban.com/top250?start=%s&filter=' % num
response_html = getPage(url)
ret = parsePage(response_html)
print(ret)
f = open("move_info7", "a", encoding="utf8") for obj in ret:
print(obj)
data = json.dumps(obj, ensure_ascii=False)
f.write(data + "\n") if __name__ == '__main__':
count =
for i in range():
main(count)
count +=
collections模块
在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。
1.namedtuple: 生成可以使用名字来访问元素内容的tuple
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
3.Counter: 计数器,主要用来计数
4.OrderedDict: 有序字典
5.defaultdict: 带有默认值的字典
namedtuple
# from collections import namedtuple
# Point=namedtuple('Point',['x','y'])
# p=Point(1,2)
# print(p.x)
# print(p.y)
deque用于插入和删除数据
# from collections import deque
# q=deque(['x','y','z'])
# q.append('a')
# q.appendleft('w')
# print(q)
OrderdDict 有序的字典
from collections import OrderedDict
# d=dict([('a',1),('b',2),('d',5),('c',3)])
# print(d)
# d1=OrderedDict([('a',1),('c',2),('d',7)])
# print(d1)
# d=OrderedDict()
# d['x']=1
# d['y']=5
# d['z']=9
# print(d)
defaultdict
有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66 , 'k2': 小于66}values = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
my_dict = {}
for value in values:
if value > 66:
if my_dict.get('k1'):
my_dict['k1'].append(value)
else:
my_dict['k1'] = [value]
else:
if my_dict.get('k2'):
my_dict['k2'].append(value)
else:
my_dict['k2'] = [value]
print(my_dict)
另一种解法:
from collections import defaultdict
values = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
dic=defaultdict(list)
for value in values :
if value>66:
dic['k1'].append(value)
else:
dic['k2'].append(value)
print(dic)
Counter计数的
from collections import Counter
c=Counter('adcddafkajljgljl')
print(c)
python 之常用模块的更多相关文章
- python的常用模块之collections模块
python的常用模块之collections模块 python全栈开发,模块,collections 认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文 ...
- python之常用模块
python 常用模块 之 (subprocess模块.logging模块.re模块) python 常用模块 之 (序列化模块.XML模块.configparse模块.hashlib模块) pyth ...
- python之常用模块二(hashlib logging configparser)
摘要:hashlib ***** logging ***** configparser * 一.hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法 ...
- Python学习——python的常用模块
模块:用一堆代码实现了某个功能的代码集合,模块是不带 .py 扩展的另外一个 Python 文件的文件名. 一.time & datetime模块 import time import dat ...
- Python之常用模块--collections模块
认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...
- Python自动化开发之python的常用模块
python常用模块 模块的种类:模块分为三种,分别是自定义模块:内置标准模块(即标准库):开源模块(第三方). 以下主要研究标准模块即标准库:标准库直接导入即可,不需要安装. 时间模块:time , ...
- python基础----常用模块
一 time模块(时间模块)★★★★ 时间表现形式 在Python中,通常有这三种方式来表示时 ...
- python(五)常用模块学习
版权声明:本文为原创文章,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明. https://blog.csdn.net/fgf00/article/details/52357 ...
- python学习——常用模块
在学习常用模块时我们应该知道模块和包是什么,关于模块和包会单独写一篇随笔,下面先来了解有关在python中的几个常用模块. 一.什么是模块 常见的场景:一个模块就是一个包含了python定义和声明的文 ...
随机推荐
- https创建请求UrL报错: 未能为 SSL/TLS 安全通道建立信任关系
1.项目中异常报错如下: 2.百度结果:原来是 网站没有使用SSL证书或者是SSl证书失效了的缘故. 3.具体解决方案如下: )导入命名空间 using System.Net.Security; us ...
- 自己用HashMap来模拟一个Session缓存(简易版)
本文记录:Hibernate中一级缓存的特点. 一级缓存的细节什么操作会向一 1.级缓存放入数据 save,update,saveOrUpdate,load,get,list,iterate,lock ...
- Java岗 面试考点精讲(网络篇03期)
1. OSI七层模型 总结一下: 应用用层按协议打包数据 由传输层加上双方的端口号 由网络层加上双方的IP地址 由链路层加上双方的MAC地址,并将数据拆分成数据帧 数模信号转换并由物理层传输到另一端 ...
- VSCode Snippet 小试牛刀
这几天因为一个需求,要不断重复一个用特定代码段去包围不同代码的需求. 这个要不断移动鼠标以及重复敲打相同代码的体力活,实在让我老眼昏花,体内的懒人之力迫使我想一个快捷的方法来代替之. 之前就知道Sni ...
- Java并发编程学习:volatile关键字解析
转载:https://www.cnblogs.com/dolphin0520/p/3920373.html 写的非常棒,好东西要分享一下 Java并发编程:volatile关键字解析 volatile ...
- blfs(systemd版本)学习笔记-编译安装配置dhcpcd
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! dhcpcd项目地址:http://www.linuxfromscratch.org/blfs/view/stable-syst ...
- SAP MM 物料主数据采购视图中的字段'Var. OUn'的作用?
SAP MM 物料主数据采购视图中的字段'Var. OUn'的作用? 物料主数据采购视图里有一个字段,叫做'Var. OUn'的, 如下图: 这个字段,笔者之前所参与的项目里,从来没有用过.所以,笔者 ...
- HashMap的resize方法中尾部遍历出现死循环问题 Tail Traversing (多线程)
一.背景介绍: 在看HashMap源码是看到了resize()的源代码,当时发现在将old链表中引用数据复制到新的链表中时,发现复制过程中时,源码是进行了反序,此时是允许反序存储的,同时这样设计的效率 ...
- Kotlin入门(25)共享参数模板
共享参数SharedPreferences是Android最简单的数据存储方式,常用于存取“Key-Value”键值对数据.在使用共享参数之前,要先调用getSharedPreferences方法声明 ...
- Javascript数组系列二之迭代方法1
我们在<Javascript数组系列一之栈与队列 >中介绍了一些数组的用法.比如:数组如何表现的和「栈」一样,用什么方法表现的和「队列」一样等等一些方法,因为 Javascript 中的数 ...