026-2018-1012 包

1.今日内容大纲

一. 昨日内容回顾
    1. re
        findall() 查找所有匹配的内容. list
        finditer()  返回迭代器
        search() 查找. 找到一个就返回 . 如果找不到返回None
        match() 匹配. 从头匹配

        sub() 根据正则替换
        subn() 根据正则替换, 返回结果和替换的次数
        split() 根据正则切割

        compile() 编译正则.

        分组
            ()python中的分组.   (?:)取消python的分组.
            (?P<名字>正则) 取值的关键

    2. 模块
        我们写的py文件就是一个模块.
        1. import 模块
        2. from 模块 import xxx

        加载模块的过程:
            1. 先去查看是否加载过该模块   顺序: 内存-> 内置 -> sys.path
            2. 如果没有加载过. 开辟一个名称空间
            3. 执行该模块中的代码, 所有产生的变量/类/函数都放在名称空间中
            4. 给名称空间命名. 如果没有as  用模块名作为名字. 如果有as 用as后面的名字

        import a, b, c 一次导入多个模块
        from 模块 import a, b, c as xxx
        from xxx import *

二. 作业


三. 今日主要内容
    1. from xxxx import *
        从xxx导入所有. 如果模块内部有__all__ 导入all中的内容. 如果没有__all__全部都导入
    2. 包
        文件夹内包含了__init__.在导入包的时候, 默认执行__init__.py
        查找的顺序: 内存 -> 内置 -> sys.path
        sys.path有坑: 根据你启动的脚本所在的位置确定查找包, 模块的路径
        sys.path.insert(0, "你想加入的位置")
        1. 绝对路径
            从sys.path找. 根
        2. 相对路径
            相对于当前文件所在文件夹
            . 当前
            .. 上一层
            启动脚本不能在包内

    预习:
        网络编程
            ip
            tcp
            udp

    考试:
        基础+函数+模块+面向对象
        包不考

    大作业:

2.爬虫---爬取电影下载链接

import re
from urllib.request import urlopen

def getContent(url):
    return urlopen(url).read().decode("gbk")
# # 爬取 http://www.dytt8.net/ 上的内容
url = "http://www.dytt8.net"
content = getContent(url)
# 准备正则
obj = re.compile(r"\[<a .*?>最新电影下载</a>\]<a href='(?P<second_url>.*?)'>.*?</a>", re.S)
second_obj = re.compile(r'<div id="Zoom">.*?译  名(?P<yiming>.*?)<br />◎片  名(?P<pianming>.*?)<br />.*?◎导  演(?P<daoyan>.*?)<br />◎主  演(?P<zhuyan>.*?)<br /><br />◎简  介.*?<td .*?><a href="(?P<download>.*?)">', re.S)

it = obj.finditer(content)
for el in it:
    second_url = el.group("second_url")
    second_content = getContent(url+second_url)
    second_it = second_obj.finditer(second_content) # 拿到第二层通过正则匹配到的内容.
    print("************************************************************************")
    for second_info in second_it:
        print(re.sub("[\u3000]", "", second_info.group("yiming")))
        print(re.sub("[\u3000]", "", second_info.group("pianming")))
        print(re.sub("[\u3000]", "", second_info.group("daoyan")))
        print(re.split("<br />", re.sub("[\u3000]", "", second_info.group("zhuyan"))))
        print(re.sub("[\u3000]", "", second_info.group("download")))

3.from xxx impo xxx

from liuwei import * # * 导入的是该模块下的所有名字, 如果模块中给出了__all__ 导入的是all列表中的名字
from liuwei import Person
print(money)

chi()

p = Person("小红", 18)
print(p)

import liuwei
from liuwei import chi
# import liuwei.chi  # 错的

4.包

from urllib.request import urlopen # 点 前面的一定是包
# 包其实就是文件夹

from urllib import request
request.urlopen()

# 导入包要根据你的实际情况
# 包就是一个文件夹, 文件夹内部要有一个__init__.py
# 在py2中这个__init__.py是强制的.  py3里面可以没有这个文件
# 自己定义一个包的话. 一定要给出__init__.py

# 创建包:
#   创建文件夹
#   创建__init__.py
# 使用pycharm可以直接创建python的package(包)

# import haha # 导入一个包的时候默认执行的是__init__.py文件



import os
os.makedirs('glance/api')
os.makedirs('glance/cmd')
os.makedirs('glance/db')
l = []
l.append(open('glance/__init__.py','w'))
l.append(open('glance/api/__init__.py','w'))
l.append(open('glance/api/policy.py','w'))
l.append(open('glance/api/versions.py','w'))
l.append(open('glance/cmd/__init__.py','w'))
l.append(open('glance/cmd/manage.py','w'))
l.append(open('glance/db/__init__.py','w'))
l.append(open('glance/db/models.py','w'))
map(lambda f:f.close() ,l)

import glance.api.policy
# glance.api.policy.get()

from glance.api.policy import get

def get():
    print("我是get")

get()

import glance # 导入包的时候. 默认执行的是__init__.py
print(glance.money)
glance.hello()

from glance import *
print(money)
hello()

import glance
glance.api.policy.get()


# sys.path 是随动. 根据启动脚本所在的文件夹.

# 找glance里面的cmd 导入manage
# sys.path -> day026 包
# import glance.api.policy

import glance.api.versions

# 当你有一天写出来一个完整的框架级的功能. 很牛B的时候. 封装出来的包一般内部使用相对路径.
# 后面学习的高级框架.内部使用的大多数是相对路径.

# 你用别人写好的框架. 你要用绝对导入.

import glance
glance.api.policy.get()



5.其他补充

orange_hero.py


__all__ = ["money", "chi"] # 此时如果有人导入这个模块. 并且是from xxx import *
money = 5000

def chi():
    print("刘伟喜欢吃东西")

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self): # 当执行print(对象)
        return self.name + str(self.age)+"明天换套衣服"

run.py

if __name__ == '__main__':
    xxxxmf.safmas.fmasfmas
    fasdf

 

glance文件夹体系结构

api

        __init__.py

        policy.py

        versions.py

cmd

        __init__.py

        manage.py

db 

        __init__.py

        models.py


__init__.py

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值