扩大
缩小
人生本来就短暂,为什么还要栽培苦涩。
返回顶部

python 基础 模块

模块

模块:模块是一系列功能代码的结合体。

模块的三种来源:

1.python内置的 (python解释器,拿来用)
2.第三方的(别人写,拿来用)
3.自定义的(自己写,自己用,给别人用)

模块的四种表现形式:

1.使用python代码写的py文件(了解)
2.编译后的共享库DLL或者是C或者C++库(了解)
3.包下面带有__init__.py的一组py文件
      - 包
          - __init__.py
          - 模块1.py
          - 模块2.py
4.python解释器提供的内置py文件

入模块发生的事情

1.先执行当前执行文件,会产生当前执行文件的名称空间
2.加载被导入模块时,会执行被导入模块代码,会产生被导入模块中名称空间
3.将被导入模块中的名称空间加载到内存中

首次导入模块

只会加载一次,将加载后的模块的名称空间放入内存中,
下次获取名字时优先从内存中获取。
import demo
import demo

给模块起别名

import 模块 as 模块的别名

模块的两种导入方式

import 模块名  (不能加.py后缀)
from 包/模块 import 模块/模块中的名字(函数名或变量名)

解决循环导入问题的两种方式

 - 在名字定义后导入模块
 - 在函数内部导入模块,让被导入的模块加载到局部名称空间中。

包:

包是内部有__init__.py的文件夹,用于管理模块。

软件开发目录规范

        - 项目的根目录: ATM
            - conf: 存放配置文件
            - core: 存放py文件,核心业务
            - interface: 接口,做逻辑处理
            - db: 存放数据的   文件
            - log: 存放日志文件
            - lib: 存放公共方法文件
            - bin: 存放启动py文件
            - readme: 项目说明书
            - 不要bin目录,在外层添加启动文件

time模块

        - 获取时间戳:给机器看的
            time.time()
        - 格式化时间(Format String): 给人类看的
            年月日
            time.strftime('%Y-%m-%d')
            时分秒
            time.strftime('%H-%M-%S')
            time.strftime('%X')

        - 格式化时间对象(struct_time)
            time_obj = time.localtime(time.time())
            time_obj.tm_year

datetime模块:

       # 获取日期时间
        datetime.datetime.today()
        datetime.datetime.now()
        datetime.date.today()

        # 获取日期"隔间"对象
        空的间隔_obj = datetime.datetime.timedelta()
        print(空的间隔_obj) ---> 0:0:0

        # 获取7天时间间隔
        day7_obj = datetime.datetime.timedelta(days=7)

        # 时间计算公式:
            - 日期时间 = 日期时间 + or - 时间对象
            - 时间对象 = 日期时间 + or - 日期时间

        # 获取当前时间7天后的时间
            day7_obj = datetime.datetime.timedelta(days=7)
            - 日期时间 = 日期时间 + or - 时间对象
            current_time = datetime.datetime.now()
            later_time = current_time + day7_obj
            print(later_time)  # 2019-11-25 09:18:XX

random模块

 - 可以随机获取数据
        - 随机对数据进行操作
        - random.random():
            - 随机获取0——1之间的某一个小数。

        - random.randint(1, 100):
            - 随机获取1—100的某一个整数。

        - random.choice(可迭代对象):  注意: 有索引的可迭代对象
            - list, tuple
            - 随机获取可迭代对象中某一个值

        - random.shuffle():  注意: 不可变类型不可被乱序
            - list
            可以对某个有索引的可迭代对象进行乱序。

        - 随机获取手机短信验证码:
            import random
            def get_code(n):

                res = ''

                for line in range(n):

                    # 获取大小写字母
                    lower_str = chr(random.randint(97, 122))
                    upper_str = chr(random.randint(65, 90))

                    # 获取数字
                    number = str(random.randint(0, 9))

                    code_list = [lower_str, upper_str, number]

                    # 每次循环随机取一个值
                    code = random.choice(code_list)
                    res += code

                return res

os模块

        - 与操作系统交互

        # 获取项目根目录,获取当前文件的目录
        project_path = os.path.dirname(os.path.dirname(__file__))

        # 路径的拼接
        os.path.join()

        # 判断文件或文件夹是否存在
        os.path.exists()  # 存在 True  不存在False

        # 判断文件夹是否存在
        os.path.isdir()

        # 判断文件是否存在
        os.path.isfile()

        # 获取某个文件夹下所有文件的名字,然后装进一个列表中
        file_list = os.listdir(文件夹的路径)

        # 创建文件夹与删除文件夹
        os.mkdir(文件夹路径)  # 只传文件夹名字,会保存在当前执行文件的目录下
        os.rmdir(文件夹路径)  # 注意: 只能删除空的文件夹

enumerate: 获取可迭代对象中索引与值

enumerate(可迭代对象)  # 注意: 可迭代對象中若是字典,则取字典中所有的key
返回的enumerate对象 ---> 相当于迭代器对象
list(迭代器对象) ---> 列表

sys模块

        - 与python解释器交互的模块

        sys.path  # 获取python解释器的环境变量路径 ---》 list[一堆路径]

        # 将当前项目根目录添加到环境变量中
        sys.path.append(
            当前项目的根目录路径
        )

        # 获取到操作系统中cmd(终端)的命令行
        # 注意: 通过python执行py文件时,后面跟着的命令行
        sys.argv  ----》 执行py文件的权限认证

hashlib模块

        - 加密模块
        - MD5()
            md5_obj = hashlib.md5()
            md5_obj.update('123456'.encode('utf-8'))  # 只能传bytes类型数据
            sal = 'python13期是最好的一期学生!'
            md5_obj.update(sal.encode('utf-8'))
            # 拿到加密后的结果
            res = md5_obj.hexdigest()  # 必须要加括号
            print(res)  # ---> 加密后的字符串

        hashlib.md5().update('123456'.encode('utf-8'))
        hashlib.md5().hexdigest()  # ---> 默认的加密字符串

序列化:

将其他数据类型转换成字符串,可以写入文件中。

反序列化

从文件中读取字符串,然后转成其他数据类型。

json

json.dumps():
    python数据 ----> json数据 ----> 字符串 ----> 写入文件中
    with open('文件名', 'w', encoding='utf-8') as f:
        res = json.dumps(数据)
        f.write(res)

json.loads():
从文件中读数据 ---》 字符串 ---》 json数据 ---》python数据
    with open('文件名', 'r', encoding='utf-8') as f:
        res = json.loads(f.read())
        print(res)  # python数据

json.dump():
    with open('文件名', 'w', encoding='utf-8') as f:
    json.dump(数据, f)
    # 省略了f.write()

json.load():
    with open('文件名', 'w', encoding='utf-8') as f:
        # 省略了f.read()
        json.load(f)

json数据

是一个第三方的特殊数据格式。

使用json数据格式的好处:

让不同语言的数据实现共享。

json模块的优缺点

优点:
- 支持跨平台,所有语言使用。

缺点:
- 可以支持python的数据类型有限。
- 存取速度相较于pickle要慢

pickle 模块的优缺点

        优点:
            - 可以支持python所有数据类型
            - 可以直接写入bytes类型的数据
            - 存取速度相较于json要快

        缺点:
            不支持跨平台,只能给python使用。

collections

- 具名元组
        from collections import namedtuple
        namedtuple('坐标', 'x y')
        namedtuple('坐标', ['x', 'y'])
        obj = namedtuple('坐标', ('x', 'y'))
        new_obj = obj(10, 20)
        print(new_obj)  # 坐标(x=10, y=20) ---> 对象

        - 有序字典
        from collections import OrderedDict
        # 基于python默认的字典,“派生” 而来的。
        order_dict = OrderedDict({'x': 10, 'y': 20})
        order_dict.get('x')

openpyxl

        - 是一个第三方模块
            pip3 install openpyxl

        用来操作Excel文件的

        - 如何创建
        from openpyxl import WorkBook
        wb_obj = WorkBook()
        # 创建一个工作页
        wb1 = wb_obj.create_sheet('工作页的名字', 工作页的索引)
        wb1['A18'] = 200
        wb_obj.save(r'D:\项目路径\python13期\day17\Excel文件名.xlsx')

        - 如何读取
        from openpyxl import load_workbook

        wb_obj = load_workbook(r'D:\项目路径\python13期\day17\Excel文件名.xlsx')
        wb1 = wb_obj['工作页的名字']
        print(wb1['A18'].value)  # 200

posted @ 2019-11-28 09:46  晴天sky  阅读(168)  评论(0编辑  收藏  举报
左边日期 搜索的制定样式