一、正则内容的补充

import re
# ret = re.findall(r'www\.baidu\.com|www\.oldboy\.com','www.baidu.com') #
# ret = re.findall(r'www\.(baidu|oldboy)\.com',r'www.baidu.com') #findall取组内 ['baidu']
# ret = re.findall(r'www\.(?:baidu|oldboy)\.com',r'www.baidu.com') #findall取组所有匹配的 ?:取消分组优先 #分组优先:优先显示括号内部的内容
#取消分组优先
# ret = re.findall(r'(?P<name><\w\d>)(?P<name2>.*?)(?P=name)','<h1>www.baidu.com<h1><h1>www.baidu.com<h1>')
# ret2 = re.finditer(r'(?P<name><\w\d>)(?P<name2>.*?)(?P=name) re.S','<h1>www.baidu.com<h1><h1>www.baidu.com<h1>') #爬虫原理
# for i in ret2:
# print(i.group('name2'))
# flags有很多可选值:
#
# re.I(IGNORECASE)
# 忽略大小写,括号内是完整的写法
# re.M(MULTILINE)
# 多行模式,改变 ^ 和$的行为
# re.S(DOTALL)
# 点可以匹配任意字符,包括换行符
# re.L(LOCALE)
# 做本地化识别的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S
# 依赖于当前环境,不推荐使用
# re.U(UNICODE)
# 使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flag
# re.X(VERBOSE)
# 冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释
# print(ret)
# ret = re.search(r'www\.(?P<web_name>baidu|oldboy)\.com',r'www.baidu.com').group('web_name') #search取组内
# ret = re.search(r'www\.(?P<web_name>baidu|oldboy)\.com',r'www.baidu.com').group() #search取全组
# print(ret) # ret=re.split("\d+","eva3egon4yuan")
# print(ret) #结果 : ['eva', 'egon', 'yuan'] # ret=re.split("(a+)","eva3egon4yuan")
# print(ret) #结果 : ['eva', '3', 'egon', '4', 'yuan'] # ret = re.search("<\w+>\w+</\w+>","<h1>hello</h1>")
# ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>")
# print(ret.group('tag_name')) #结果 :h1
# print(ret.group()) #结果 :<h1>hello</h1>
#分组的命名和组的引用 # ret = re.search(r"<(\w+)>\w+</\1>","<h1>hello</h1><h1>hello</h1>")
# print(ret.group(1))
# ret = re.finditer(r"<(\w+)>\w+</\1><(span)>\w+</\2>","<h1>hello</h1><span>hello</span>")
# for i in ret:
# print(i.group(1))
# print(i.group(2))
# h1
# span
#如果不给组起名字,也可以用\序号来找到对应的组,表示要找的内容和前面的组内容一致 !!!!
#获取的匹配结果可以直接用group(序号)拿到对应的值 !!!!
# print(ret.group()) #结果 :<h1>hello</h1>
# ret = re.findall(r"<(\w+)>\w+</\1>","<h1>hello</h1>")
# print(ret)
ret=re.findall(r"\d+","1-2*(60+(-40.35/5)-(-4*3))")
print(ret)
# 40.35 缺点是里边会有小数的整数部分和小数部分也会计算进去
#\d+\.\d+|\d+ [^]
# 使用优先级的原理来排除小数
ret=re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*3))")
print(ret)
ret.remove('') # ret=re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*3))")
# print(ret)
# ret.remove('')
# print(ret)
collections      模块                
在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。

1.namedtuple: 生成可以使用名字来访问元素内容的tuple

2.deque: 双端队列,可以快速的从另外一侧追加和推出对象

3.Counter: 计数器,主要用来计数

4.OrderedDict: 有序字典

5.defaultdict: 带有默认值的字典
# print(r'\n') #表示取消字符串内所有转译符的转译作用 real
# print('\n') #'\'转译符,n,加上转译符 \n --> 换行了
# print('\\n') #'\'转译符,n,加上转译符 \n --> 换行了
#
#结论就是:在工具里什么样,挪到python里加个r # from collections import Iterator #迭代器
# from collections import Iterable #可迭代对象 from collections import namedtuple
# point1 = (1,1)
# x = point1[0]
# y = point1[1]
# P = namedtuple('Point',['x','y'])
# p1 = P(1,2)
# p2 = P(3,4)
# print(p1.x)
# print(p1.y)
# print(p2.x)
# print(p2.y)
# yuan = namedtuple('yuan',['x','y','z'])
# p = yuan(2,0,4)
# print(p.x,type(p.x)) #
# 描述一类东西的时候,这一类东西都有相同的特征。
# 想直接用特征的名字就描述这个值的时候,就可以用可命名元祖
# 面向对象的时候还会再讲
# 生日:年月日 (2011,11,11) #练习 #队列
# import queue #队列_多线程多进程
# a = queue.Queue()
# a.put(1)
# a.put(2)
# a.put(3)
# print(a.qsize())
# a.get()
# a.get()
# a.get()
# a.get()
# q = queue.Queue()
# q.put([1])
# q.put(2) #处理任务
# q.put(300)
# q.put('aaa')
# q.put('wahaha')
# # print(q.qsize())
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get()) #hold住的功能
# print(q.qsize())
# print(q.get_nowait()) #如果没有不会hold住,且会报错 # from collections import deque
# dq = deque()
# dq.append('a')
# dq.append('b')
# dq.append('c')
# dq.append('d')
# dq.append('e')
# print(dq)
# dq.appendleft('y')
# dq.append('y')
# dq.appendleft('c')
# print(dq.popleft()) from collections import OrderedDict
od = OrderedDict([('a', [1,2,3,4]), ('b', 2), ('c', 3)])
# for k in od:
# print(k,od[k])
print(od)
for i in enumerate(od):
print(i)
# l = [11,22,33,44,55,66,77,88,99,90]
# dic = {}
# for i in l:
# if i > 66:
# if 'k1' in dic:
# dic['k1'].append(i)
# else:
# dic['k1'] = []
# dic['k1'].append(i) from collections import defaultdict
def func():
return 0
my_dict = defaultdict(func)
# my_dict = {}
print(my_dict['k'])

collections

Counter

Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。

c = Counter('abcdeabcdabcaba')
print c
输出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

计数器

Eva_J

    * 博客园
* 首页
* 联系
* 管理 随笔- 29 文章- 61 评论- 63
collections模块—— Counter
Counter目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。
创建
下面的代码说明了Counter类创建的四种方法:
Counter类的创建
>>> c = Counter() # 创建一个空的Counter类
>>> c = Counter('gallahad') # 从一个可iterable对象(list、tuple、dict、字符串等)创建
>>> c = Counter({'a': 4, 'b': 2}) # 从一个字典对象创建
>>> c = Counter(a=4, b=2) # 从一组键值对创建
计数值的访问与缺失的键
当所访问的键不存在时,返回0,而不是KeyError;否则返回它的计数。
计数值的访问
>>> c = Counter("abcdefgab")
>>> c["a"]
2
>>> c["c"]
1
>>> c["h"]
0 计数器的更新(update和subtract)
可以使用一个iterable对象或者另一个Counter对象来更新键值。
计数器的更新包括增加和减少两种。其中,增加使用update()方法:
计数器的更新(update)
>>> c = Counter('which')
>>> c.update('witch') # 使用另一个iterable对象更新
>>> c['h']
3
>>> d = Counter('watch')
>>> c.update(d) # 使用另一个Counter对象更新
>>> c['h']
4 减少则使用subtract()方法:
计数器的更新(subtract)
>>> c = Counter('which')
>>> c.subtract('witch') # 使用另一个iterable对象更新
>>> c['h']
1
>>> d = Counter('watch')
>>> c.subtract(d) # 使用另一个Counter对象更新
>>> c['a']
-1 键的修改和删除
当计数值为0时,并不意味着元素被删除,删除元素应当使用del。
键的删除
>>> c = Counter("abcdcba")
>>> c
Counter({'a': 2, 'c': 2, 'b': 2, 'd': 1})
>>> c["b"] = 0
>>> c
Counter({'a': 2, 'c': 2, 'd': 1, 'b': 0})
>>> del c["a"]
>>> c
Counter({'c': 2, 'b': 2, 'd': 1}) elements()
返回一个迭代器。元素被重复了多少次,在该迭代器中就包含多少个该元素。元素排列无确定顺序,个数小于1的元素不被包含。
elements()方法
>>> c = Counter(a=4, b=2, c=0, d=-2)
>>> list(c.elements())
['a', 'a', 'a', 'a', 'b', 'b'] most_common([n])
返回一个TopN列表。如果n没有被指定,则返回所有元素。当多个元素计数值相同时,排列是无确定顺序的。
most_common()方法 >>> c = Counter('abracadabra')
>>> c.most_common()
[('a', 5), ('r', 2), ('b', 2), ('c', 1), ('d', 1)]
>>> c.most_common(3)
[('a', 5), ('r', 2), ('b', 2)] 浅拷贝copy
浅拷贝copy
>>> c = Counter("abcdcba")
>>> c
Counter({'a': 2, 'c': 2, 'b': 2, 'd': 1})
>>> d = c.copy()
>>> d
Counter({'a': 2, 'c': 2, 'b': 2, 'd': 1}) 算术和集合操作
+、-、&、|操作也可以用于Counter。其中&和|操作分别返回两个Counter对象各元素的最小值和最大值。需要注意的是,得到的Counter对象将删除小于1的元素。
Counter对象的算术和集合操作
>>> c = Counter(a=3, b=1)
>>> d = Counter(a=1, b=2)
>>> c + d # c[x] + d[x]
Counter({'a': 4, 'b': 3})
>>> c - d # subtract(只保留正数计数的元素)
Counter({'a': 2})
>>> c & d # 交集: min(c[x], d[x])
Counter({'a': 1, 'b': 1})
>>> c | d # 并集: max(c[x], d[x])
Counter({'a': 3, 'b': 2}) 其他常用操作
下面是一些Counter类的常用操作,来源于Python官方文档
Counter类常用操作
sum(c.values()) # 所有计数的总数
c.clear() # 重置Counter对象,注意不是删除
list(c) # 将c中的键转为列表
set(c) # 将c中的键转为set
dict(c) # 将c中的键值对转为字典
c.items() # 转为(elem, cnt)格式的列表
Counter(dict(list_of_pairs)) # 从(elem, cnt)格式的列表转换为Counter类对象
c.most_common()[:-n:-1] # 取出计数最少的n个元素
c += Counter() # 移除0和负值

计数器

时间模块

在Python中,通常有这三种方式来表示时间:时间戳、元组(struct_time)、格式化的时间字符串:

(1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

(2)格式化的时间字符串(Format String): ‘1999-12-06’

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身 python中时间日期格式化符号:

时间字符串格式

#结构化时间 --> %a %b %d %H:%M:%S %Y串
#time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串
>>>time.asctime(time.localtime(1500000000))
'Fri Jul 14 10:40:00 2017'
>>>time.asctime()
'Mon Jul 24 15:18:33 2017' #%a %d %d %H:%M:%S %Y串 --> 结构化时间
#time.ctime(时间戳) 如果不传参数,直接返回当前时间的格式化串
>>>time.ctime()
'Mon Jul 24 15:19:07 2017'
>>>time.ctime(1500000000)
'Fri Jul 14 10:40:00 2017'
import time
true_time=time.mktime(time.strptime('2017-09-11 08:30:00','%Y-%m-%d %H:%M:%S'))
time_now=time.mktime(time.strptime('2017-09-12 11:00:00','%Y-%m-%d %H:%M:%S'))
dif_time=time_now-true_time
struct_time=time.gmtime(dif_time)
print('过去了%d年%d月%d天%d小时%d分钟%d秒'%(struct_time.tm_year-1970,struct_time.tm_mon-1,
struct_time.tm_mday-1,struct_time.tm_hour,
struct_time.tm_min,struct_time.tm_sec))

时间差

sys 模块

sys模块是与python解释器交互的一个接口

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version 获取Python解释程序的版本信息
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
import sys
# print(sys.platform)
# print(sys.version)
# sys.exit(0)
# sys.exit(1) # print(sys.path)
# 就是模块导入的时候从这个列表中的路径依次去寻找模块
# 找到了就停止
# sys.path的第一位元素是当前被执行的python文件所在的地址
# 之后的地址依次是python内部的库 print(sys.argv)
#python 6sys.py
#python 6sys.py alex 3714
# args_lst = sys.argv #['6sys.py', 'alex', '3714']
# if len(args_lst) ==3 and args_lst[1] == 'alex' and args_lst[2] == '3714':
# print('执行程序了')
# else:
# sys.exit() #sys.argv的第一个值是固定的的,就是这个文件的名字
#之后的参数 是在控制台执行py文件的时候传入的参数 python 6sys.py alex 3714
#我们可以用这些参数来直接完成一些校验类的工作 a = sys.argv
if a[1] == 'zjc'and a[2] =='':
print('开始执行')
else:
sys.exit(0)

sys执行脚本验证账号密码

day20常用模块的更多相关文章

  1. DAY20 常用模块(三)

    一.加密模块 1.加密方式: 1.有解密的加密方式 2.无解密的加密方式,碰撞检查 1.不同数据加密后的结果一定不一致 2.相同数据的加密结果一定是一致 2.hashlib模块 1.基本使用 ciph ...

  2. day20 python常用模块

    认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀.     但其实import加载的模块分为四个通用类别: 1 使用pytho ...

  3. 20 Python 常用模块

    collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict. ...

  4. python常用模块:项目目录规范、定制程序入口、自定义模块、引用变量、time和datetime模块

    今天讲课内容有两大部分: 一.文件目录规范二.定制程序入口三.使用标准目录后四.常规函数time.datetime 一.标准目录规范 之前用过的案例atm机+购物商城代码过长,在学习了模块和包以后,我 ...

  5. atitit 商业项目常用模块技术知识点 v3 qc29

    atitit 商业项目常用模块技术知识点 v3 qc29 条码二维码barcodebarcode 条码二维码qrcodeqrcode 条码二维码dm码生成与识别 条码二维码pdf147码 条码二维码z ...

  6. 《Ansible权威指南》笔记(3)——Ad-Hoc命令集,常用模块

    五.Ad-Hoc命令集1.Ad-Hoc命令集通过/usr/bin/ansible命令实现:ansible <host-pattern> [options]    -v,--verbose  ...

  7. python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化

    生成器 在Python中,一边循环一边计算的机制,称为生成器:generator. 如: >>> g = (x * x for xin range(10)) >>> ...

  8. 进击的Python【第五章】:Python的高级应用(二)常用模块

    Python的高级应用(二)常用模块学习 本章学习要点: Python模块的定义 time &datetime模块 random模块 os模块 sys模块 shutil模块 ConfigPar ...

  9. Python模块之常用模块,反射以及正则表达式

    常用模块  1. OS模块 用于提供系统级别的操作,系统目录,文件,路径,环境变量等 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("di ...

随机推荐

  1. RenderMonkey基本使用方法【转】

    RenderMonkey基本使用方法 楔子: 差不多从年中开始由于工作需要,开始研究Direct3D,这是继大二开始自学DX开始,睽违了6年后再重新学习DX.虽然时间很久了,但是幸亏还是有点基础,所以 ...

  2. cakephp事务处理

    使用cakephp框架做开发时,涉及到多个数据表的数据保存,需要使用cakephp的事务处理,查cakephp的说明手册也没看明白,从开发社区中看到了解决的办法,考虑到英文的问题,所以转给大家,以供参 ...

  3. paste,两个文件相同行拼接在一起的shell命令

    今天又学到一个命令,果然厉害 参考这里 http://blog.csdn.net/anders_zhuo/article/details/8461641

  4. Bitnami 2015

    WordPress WordPress is one of the world's most popular web publishing platforms for building blogs a ...

  5. Amixer 控制声音

    amixer set Master XXXX 就可以直接控制主声卡属性 amixer set Master 20 #设置主声卡声音为 20 amixer set Master off #关闭主声卡(静 ...

  6. Java 1.7 ReentrantReadWriteLock源代码解析

    因为本人水平与表达能力有限,有错误的地方欢迎交流与指正. 1 简单介绍 可重入读写锁时基于AQS实现的,典型的用法如JDK1.7中的演示样例: class RWDictionary { private ...

  7. Android Exception18(Stuido debug .....)

    这个问题比较诡异,在用android-studio debug的时候,第一次能正常使用,但是后面就不知道是什么鬼,每次debug都冒出来这个. 之后,重新新建一个项目就好了

  8. 【BIEE】18_时间序列函数的使用

    三个时间序列函数 AGO: 实现同环比 TO DATE:实现累计指标,如MTD月累计.YTD年累计 Period Rolling:当前时间的x个时间单位开始到y个时间单位结束这一时段内的度量总和 BI ...

  9. Oracle 查询搜索字符串在哪些存储过程中包含

    如下: select *from all_source where OWNER = 'LC0019999'and TEXT like '%insert into%d values(%'

  10. Qt笔记——元对象系统

    Qt元对象系统提供了对象间的通信机制:信号和槽.以及执行类形信息和动态属性系统的支持.是标注C++的一个扩展,它使得Qt可以更好的实现GUI图形用户界面编程.Qt的元对象系统不支持C++模板.虽然模板 ...