01 昨日内容回顾
包:
1,在内存中创建一个以包命名的空间。
2,执行包的__init__文件将文件中的名字加载到包的名称空间。
3,通过包名.名字(变量,函数,类名)方式调用这些内容。
aaa.x
aaa.y
调用m2怎么做?
从__init__文件:from aaa import m2
调用bbb包?
从aaa 的__init__文件:from aaa import bbb
找到bbb包里面的x
bbb __init__文件: x = 666
import aaa
aaa.bbb.x
找到m3?
1,在执行文件:import aaa
2,在aaa的__init__文件:from aaa import bbb
3, 在bbb的__init__文件: from aaa.bbb import m3
aaa.bbb.m3.f1()
# 相对导入,绝对导入
.当前目录 .. 上一级目录
from a.b.c.d import e
点的左边都是包
在包的__init__ 里面导入模块 from ... import ...
from a.b.c.d import e.f.t 错误
random:随机模块
randomint(1,10)
random.choice()
shutil:
复制文件,文件夹
打包压缩 解压
02 re模块
对一个大篇幅的字符串,按照你的规则找出想要的字符串。
'fjdsilafjdsfljk太白金星' 通过re的方法找出fjds
找出一本名著:水浒传 西游记 红楼梦 三国演义
找一本名著:三个字,官二代勾引大嫂,英雄为兄报仇,的狗血剧情:金-瓶梅。
03 xml
# 02 re模块 import re# s1 = '老男孩 柳州 柳州 柳州'# print(s1.find('柳州')) #返回第一个柳的索引 # print(re.findall('柳州',s1)) #['柳州', '柳州', '柳州']# print(type((re.findall('柳州',s1)))) #list # 元字符 # \w匹配字母(包含中文)或数字或下划线# \W匹配非字母(包含中文)或数字或下划线 # print(re.findall('\w','太白 liuzhou 123 --*'))# print(re.findall('\W','太白 liuzhou 123 --*')) # \s 匹配任意的空白符# \S 匹配任意非空白符 # print(re.findall('\s',' 广西 liuzhou __ -- * \n\t'))# print(re.findall('\S',' 广西 \S liuzhou __ -- * \n\t')) #同下,遇\打印\\# print(re.findall('\\S',' 广西 \S liuzhou __ -- * \n\t')) #['广', '西', '\\', 'S', 'l', 'i', 'u', 'z', 'h', 'o', 'u', '_', '_', '-', '-', '*']# print(re.findall('\\\S',' 广西 \S liuzhou __ -- * \n\t')) #['\\S'] 加\\ # \d 匹配数字# \D 匹配非数字# print(re.findall('\d','柳州 \d 123-*'))# print(re.findall('\\d','柳州 \d 123-*')) #无效果# print(re.findall('\\\d','柳州 \d 123-*')) #需要加\\ # print(re.findall('\D','柳州 \D 123-*')) #遇\打印\\# print(re.findall('\\D','柳州 \D 123-*')) #无效果# print(re.findall('\\\D','柳州 \D 123-*')) #['\\D'] 加\\ # \A 或 ^ 匹配字符串的开始# print(re.findall('\A老','老男孩 太白'))# print(re.findall('\A老','男孩 老 太白')) #[]# print(re.findall('^老','老男孩 老 太白')) #['老'] # \Z $ 匹配字符串结束# print(re.findall('广西\Z',' 柳州 ds 广西')) #\Z放后面# print(re.findall('地方$',' 柳州 ds 广西 地方')) #[]# print(re.findall('\$$',' 柳州 ds 广西 地方 $')) #转译\$ # 重复匹配# . ? * + {m,n} .* .*? # .匹配任意字符 # print(re.findall('a.b','babb'))# print(re.findall('a.b','babb asdb')) #['abb'] . 取一个字符# print(re.findall('a.b','abb a%b a1b aab a7b a+b a b a\nb'))# print(re.findall('a.b','abb a%b a1b aab a7b a+b a b a\nb',re.DOTALL)) #?# print(re.findall('a.bb','abb abb aaab')) # ? 匹配0个或者1个由左边字符定义的片段# print(re.findall('a?b','abbzab abb ab aab')) #['ab', 'b', 'ab', 'ab', 'b', 'ab', 'ab'] # * 匹配0个或者多个左边字符表达式# print(re.findall('a*b','b ab aaaaaab abbbbbbb'))#['b', 'ab', 'aaaaaab', 'ab', 'b', 'b', 'b', 'b', 'b', 'b'] # + 匹配1个或者多个左边字符表达式# print(re.findall('a+b','b ab aaaaaab abb')) # ['ab', 'aaaaaab', 'ab'] # {m,n} 匹配m个至n个左边字符表达式# print(re.findall('a{1,3}b','aaab ab aab abbb aaz aabb aaaaab')) # .* 贪婪匹配 从头到尾.# print(re.findall('a.*b','aab ab aaaaab a!!!@#$bz')) # # .*? 非贪婪匹配 从头到尾.# print(re.findall('a.*?b','aab ab aaaaab a!!!@#$bz')) # [] 取一个# print(re.findall('a[abc]b','aab abb acb afb'))# print(re.findall('a[0-9]b','a1b a2b a3b acb ayb'))# print(re.findall('a[a-z]b','a1b a2b a3b acb ayb adb'))# print(re.findall('a[A-Z]b','a1b a2b a3b aAb aDb aYb'))# print(re.findall('a[a-zA-Z]b','aab aAb aWb aqb a1b')) # 大小写字母# print(re.findall('a[A-z]b','aab aAb aWb aqb a1b')) #中间会多一些特殊字符# print(re.findall('a[0-9][0-9]b','a1b a2b a29b a56b a456b'))# print(re.findall('a[-+*/]b','a+b a-b a*b a/b a6b')) 单纯的想表示- 一定要放在最前面 # () 制定一个规则,将满足规则的结果匹配出来# 将满足规则的() 里面的内容匹配出来# print(re.findall('.*?_sb','wusir_sb alex_sb 日天_sb'))# print(re.findall('(.*?)_sb','wusir_sb alex_sb 日天_sb'))# print(re.findall('company|companies','Too many companies have gone bankrupt, and the next one is my company'))# | 或# print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company'))# ?: 全部匹配出来 # \ 匹配# print(re.findall('武sir|太白|alex','武sir 太白 金星 李杰 alex'))# print(re.findall('\.(\w*)', 'dsajk.1234.dasf')) #\.加\转译 # search 找到第一个则返回,返回一个对象,没有找到则返回None # 对象.group() 可以将找到的第一个值取出来# print(re.search('alex','re alex alex 太白')) #<_sre.SRE_Match object; span=(3, 7), match='alex'># print(re.search('alex','re aaaelx 太白'))# ret = re.search('alex','re alex alex 太白')# print(ret.group()) # print(re.match('barry','barry fdlfjsadfkl ').group())# print(re.match('barry','qbarry fdlfjsadfkl ')) # s1 = 'wusir;太白;alex; 日天'# s1 = 'wusir;太白,alex|日天!小虎'# print(s1.split(';'))# print(s1.replace(';',';').split(';'))# print(re.split('[;,|!]',s1)) # print(re.sub('barry', '太白金星', 'barry是最好的讲师,barry就是一个普通老师,请不要将barry当男神对待。',2)) # ^ 在中括号[]中是取反# print(re.search('([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)', r'alex is sb').group())# print(re.sub('([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)', r'\5\2\3\4\1',r'alex is sb')) #调序 了解 # obj = re.compile('\d{2}') # 制定一个统一的匹配规则# print(obj.findall('fdsafsda1243fdsdf324'))# print(obj.findall('123fksldjf3432fdsjlkf453')) # ret = re.finditer('\d', 'ds3sy4784a')# print(ret)# # ret = iter([3 4 7 8 4])# print(next(ret).group())# print(next(ret).group())# print([i.group() for i in ret]) # s1 = '深圳电话:0755-546123546 深圳地址:广东..'# print(re.search('\d+-\d+',s1).group())# 命名分组# 分组基础上定规则 ?P<组名># ret = re.search('(?P<quhao>\d+)-(?P<num>\d+)',s1)# print(ret.group('quhao'))# print(ret.group('num')) # s1 = '深圳电话:0755-546123546 深圳地址:广东..'# print(re.findall('[1-9]*-[1-9]*',s1)) # s2 = "ip='192.168.6.11',verion:1.0.0"# print(re.search("ip='\d+\.\d+\.\d+\.\d+'",s2).group())# print(re.search("ip='(?P<ip>\d+\.\d+\.\d+\.\d+)'",s2).group('ip')) # ret = re.search('(?P<ip>[\d+/.]+)',s2)# print(ret.group('ip')) #qq号# print(re.findall('[1-9]\d{5,12}','dfdsfd 12343435 fds0 5435454 56567567 dsjfhdsf'))