python基础——6.模块和包 re模块 临时存放


1.什么是模块

2.模块的导入和使用
# 模块导入流程
先从sys.modules里查看是否已经被导入
如果没有导入,就依据sys.path路径去寻找模块
找到了就导入
创建这个模块的命名空间
执行文件,把文件中的名字都放到命名空间里

# 模块导入的方法
    import datetime as dt
    from time import sleep

# 都支持多名字导入
# sys.moudles记录了所有被导入的模块
# as重命名
# sys.path记录了导入模块的时候需找的所有路径

3.包
# 把解决一类问题的模块放在同一个文件夹里---包
# 包的导入语句也分为import和from import两种
# 必须遵循一个原则,点左边都必须是个包

# 使用绝对路径 不管在包内部还是外部 导入了就能用
# 不能移动 但是直观

# 相对路径
# 可以随意移动包 只要能找到包的位置,就可以使用包里的模块
# 包里的模块如果想使用其他模块的内容 只能使用相对路径 使用据对路径就不能在包内直接执行了

# 导入包会自动执行包里的__init__.py文件

4.常用模块
re 模块
正则表达式--用来做字符串匹配
分组优先和取消分组优先?
?在正则中有三种用法
从一个没有括号的表达式中取乘除法 == 正则表达式?
正则模块
findall # 返回所有符合要求条件的结果
search # 从前往后找到1个就返回,返回的是结果的对象
# 需要用.group()才能看到结果
# 没有去打印会报错,先直接打印结果对象返回None
match # match和search用法完全一样
# 从第一个字符开始找,不匹配返回None,不继续匹配
# 匹配的内容需要group显示
# 匹配不上会报错,打印结果对象返回None
split # 比如字符串,按每个字符分割一次
sub # 替换(旧, 新, 要执行文件, 替换次数)
subn # 多打印出替换了的次数
compile # 对正则规则编译,拿到正则表达式对象
finditer # 拿到的是一个迭代器
# 用next(ret).group()拿结果
# 用for循环拿结果也需要用.group()

    findall和split优先级查询
        findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
        split在匹配部分加上()之后所切出的结果是不同的
        没有括号的保留所匹配的项,但是有括号的却能保留匹配的项
        这个在某些需要保留匹配部分的使用过程非常重要