1.复习
正则表达式
字符组 [字符]
元字符
\w \d \s
\W \D \S
. 除了换行符以外的任意字符
\n \t
\b
^ $ 匹配字符串的开始和结束
() 分组 是对多个字符组整体量词约束的时候用的
re模块:分组是有优先的
findall
split
| 从左到右匹配,只要匹配上就不继续匹配了。所以应该把长的放前面
[^] 除了字符组内的其他都匹配
量词
* 0~
+ 1~
? 0~1
{n} n
{n,} n~
{n,m} n~m
转义的问题
import re
re.findall(r'\\s',r'\s')
惰性匹配
量词后面加问号
.*?abc 一直取遇到abc就停
re模块
import re
re.findall('\d','awir17948jsdc',re.S)
返回值:列表 列表中是所有匹配到的项
ret = search('\d(\w)+','awir17948jsdc')
ret = search('\d(?P<name>\w)+','awir17948jsdc')
找整个字符串,遇到匹配上的就返回,遇不到就None
如果有返回值ret.group()就可以取到值
取分组中的内容 : ret.group(1) / ret.group('name')
match
从头开始匹配,匹配上了就返回,匹配不上就是None
如果匹配上了 .group取值
分割 split
替换 sub 和 subn
finditer 返回迭代器
compile 编译 :正则表达式很长且要多次使用
import re
ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>")
还可以在分组中利用?<name>的形式给分组起名字
获取的匹配结果可以直接用group('名字')拿到对应的值
print(ret.group('tag_name')) #结果 :h1
print(ret.group()) #结果 :<h1>hello</h1>
ret = re.search(r"<(\w+)>\w+</\1>","<h1>hello</h1>")
如果不给组起名字,也可以用\序号来找到对应的组,表示要找的内容和前面的组内容一致
获取的匹配结果可以直接用group(序号)拿到对应的值
print(ret.group(1))
print(ret.group()) 结果 :<h1>hello</h1>
import re
ret=re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*3))")
print(ret) #['1', '2', '60', '40', '35', '5', '4', '3']
ret.remove('')
print(ret)
ret=re.findall(r"-?\d+\.\d*|(-?\d+)","1-2*(60+(-40.35/5)-(-4*3))")
print(ret) #['1', '-2', '60', '', '5', '-4', '3']
ret.remove("")
print(ret) #['1', '-2', '60', '5', '-4', '3']
首先得到一个字符串
去空格
没有空格的字符串
先算最里层括号里的 : 找括号 ,且括号里没有其他括号
得到了一个没有括号的表达式 :只有加减乘除 从左到右先找到第一个乘除法 —— 重复
所有的乘除法都做完了
计算加减 —— 加减法
只有一个数了 就可以结束了
http://www.cnblogs.com/Eva-J/articles/7228075.html#_label7
2.collection模块
列表、元祖
字典
集合、frozenset
字符串
堆栈 : 先进后出
队列 :先进先出 FIFO
from collections import namedtuple
Point = namedtuple('point',['x','y','z'])
p1 = Point(1,2,3)
p2 = Point(3,2,1)
print(p1.x)
print(p1.y)
print(p1,p2)
花色和数字
Card = namedtuple('card',['suits','number'])
c1 = Card('红桃',2)
print(c1)
print(c1.number)
print(c1.suits)
队列
import queue
q = queue.Queue()
q.put([1,2,3])
q.put(5)
q.put(6)
print(q)
print(q.get())
print(q.get())
print(q.get())
print(q.get()) # 阻塞
print(q.qsize())
from collections import deque
dq = deque([1,2])
dq.append('a') # 从后面放数据 [1,2,'a']
dq.appendleft('b') # 从前面放数据 ['b',1,2,'a']
dq.insert(2,3) #['b',1,3,2,'a']
print(dq.pop()) # 从后面取数据
print(dq.pop()) # 从后面取数据
print(dq.popleft()) # 从前面取数据
print(dq)
有序字典
from collections import OrderedDict
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od) # OrderedDict的Key是有序的
print(od['a'])
for k in od:
print(k)
from collections import defaultdict
d = defaultdict(lambda : 5)
print(d['k'])
3.time模块
import time
time.sleep(100)
print(time.time())
格式化时间 —— 字符串: 给人看的
时间戳时间 —— float时间 : 计算机看的
结构化时间 —— 元组 :计算用的
print(time.strftime("%Y-%m-%d %a %H:%M:%S")) #year month day HOUR MINUTE SECOND
print(time.strftime("%Y/%m/%d %H:%M:%S")) #year month day HOUR MINUTE SECOND
print(time.strftime("%m-%d %H:%M:%S")) #year month day HOUR MINUTE SECOND
print(time.strftime("%H:%M:%S")) #year month day HOUR MINUTE SECOND
print(time.strftime("%H:%M")) #year month day HOUR MINUTE SECOND
struct_time = time.localtime()
print(struct_time)
print(struct_time.tm_year)
import time
时间戳和结构化时间
t = time.time()
print(t)
print(time.localtime(3000000000))
print(time.gmtime(t))
print(time.mktime(time.localtime()))
print(time.strptime('2000-12.31','%Y-%m.%d'))
print(time.strftime('%m/%d/%Y %H:%M:%S',time.localtime(3000000000)))
print(time.asctime())
4.random模块
1234 432145
Abc123 a17698
0-9
chr
[65-90] 数字
字母 = chr(数字)
随机数字
随机选一个 [随机数字,随机字母]
5.os模块
import os
print(os.getcwd()) 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir(r'C:\Users\Administrator\PycharmProjects')
print(os.getcwd())
os.chdir('..') 改变当前脚本工作目录;相当于shell下cd
print(os.getcwd())
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1/dirname2') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname1/dirname') 生成单级目录;相当于shell中mkdir dirname
print(os.listdir(r'C:/Users/Administrator/PycharmProjects/s9'))
列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
print(os.stat('1.复习.py')) 获取文件/目录信息
print(os.sep) # python代码跨平台 :linux windows
/user/bin/
os.system("dir")
ret = os.popen("dir").read() 运行shell命令,获取执行结果
print(ret)
print(os.environ)
print(os.getcwd())
print(os.path.split(os.getcwd()))
print(os.path.join(r'C:\Users\Administrator','user','local'))
print(os.getcwd())
print(os.path.getsize(os.path.join(os.getcwd(),'1.复习.py')))
6.sys模块
import sys
print(sys.platform)
print(sys.version)
print(sys.path.clear())
ret = sys.argv
name = ret[1]
pwd = ret[2]
if name == 'alex' and pwd == 'alex3714':
print('登陆成功')
else:
print("错误的用户名和密码")
sys.exit()
print('你可以使用计算器了')
有多少个模块 —— 每个模块大概解决得问题
把模块中的所有方法敲一遍 —— 写到博客上
代码作业
计算时间差
验证码
计算器
默写:
验证码