• 【Python从0到1】第四篇:使用库



    一、标准库

    1.1 认识标准库

    Python 自身内置了非常丰富的库.

    在 Python 官方文档上可以看到这些库的内容.
    简单来说, 主要是这些部分:
    标准库
    在这里插入图片描述

    我们不需要把这些库的内容都背下来, 只要大概知道里面有啥, 需要用的时候能够找到即可.

    1.1 使用 import 导入模块

    使用 import 可以导入标准库的一个 模块

    import [模块名]
    
    • 1

    所谓 “模块” , 其实就是一个单独的 .py 文件.
    使用 import 语句可以把这个外部的 .py 文件导入到当前 .py 文件中, 并执行其中的代码.

    代码示例: 日期计算
    输入任意的两个日期, 计算两个日期之间隔了多少天.

    • 使用 import 语句导入标准库的 datetime 模块
    • 使用 datetime.datetime 构造两个日期. 参数使用 年, 月, 日 这样的格式.
    • 两个日期对象相减, 即可得到日期的差值
      在这里插入图片描述

    二、第三方库

    2.1 认识第三方库

    第三方库就是别人已经实现好了的库, 我们可以拿过来直接使用.
    虽然标准库已经很强大了, 但是终究是有限的. 而第三方库可以视为是集合了全世界 Python 程序猿的智
    慧, 可以说是几乎无穷无尽.
    问题来了, 当我们遇到一个需求场景的时候, 如何知道, 该使用哪个第三方库呢?
    就需要用到下面几个网站了:
    在这里插入图片描述

    当我们确定了该使用哪个第三方库之后, 就可以使用 pip 来安装第三方库了.

    2.2 使用 pip

    pip 是 Python 内置的 包管理器.

    所谓 包管理器 就类似于我们平时使用的手机 app 应用商店一样.
    第三方库有很多, 是不同的人, 不同的组织实现的. 为了方便大家整理, Python 官方提供了一个网站
    PyPI https://pypi.org/, 来收集第三方库.
    其他大佬写好的第三方库也会申请上传到 PyPI 上.
    这个时候就可以方便的使用 pip 工具来下载 PyPI 上的库了

    pip 在我们安装 Python 的时候就已经内置了. 无需额外安装.
    pip 是一个可执行程序, 就在 Python 的安装目录中.

    打开 cmd, 直接输入 pip. 如果显示以下帮助信息, 说明 pip 已经准备就绪.
    在这里插入图片描述
    如果最开始按照要求在安装 Python 的时候勾选了

    在这里插入图片描述
    那么 pip 就是默认可用的.
    如果提示

    ‘pip’ 不是内部或外部命令,也不是可运行的程序
    或批处理文件。

    则说明没有正确的把 pip 加入到 PATH 中, 可以手动把 pip 所在的路径加入到 PATH 环境变量中

    使用以下命令, 即可安装第三方库

    pip install [库名]
    注意: 这个命令需要从网络上下载, 使用时要保证网络畅通.
    安装成功后, 即可使用 import 导入相关模块, 即可进行使用

    注意: 如果使用 pip 安装完第三方库之后, 在 PyCharm 中仍然提示找不到对应的模块, 则检查 Settings ->Project -> Python Interpreter , 看当前 Python 解释器设置的是否正确. (如果一个机器上安装了多个版本的 Python, 容易出现这种情况).

    2.3 代码示例: 生成二维码

    (1) 通过搜索引擎, 确定使用哪个库
    在这里插入图片描述
    得到情报, qrcode 这个库, 可以用来生成二维码.
    (2) 查看 qrcode 文档
    在这里插入图片描述
    点击则进入 qrcode 的详情页.
    文档开头描述了如何安装 qrcode
    在这里插入图片描述
    页面中央位置描述了 qrcode 库的使用方法
    在这里插入图片描述

    import qrcode
    
    img = qrcode.make('nihao')
    img.save('qrcode.png')
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    使用微信或者其他工具扫码, 即可看到二维码内容.
    所谓二维码, 本质上就是使用黑白点阵表示一个字符串.
    我们日常使用的二维码内部一般是一个 URL, 扫码后会自动跳转到对应的地址, 从而打开一个网页

    2.4 代码示例: 操作 excel

    读取 excel 可以使用 xlrd 模块. 文档地址: https://xlrd.readthedocs.io/en/latest/
    修改 excel 可以使用 xlwt 模块. 文档地址: https://xlwt.readthedocs.io/en/latest/
    此处以 xlrd 为例, 演示 excel 的基本操作
    在这里插入图片描述
    求 1 班的同学的平均分.
    虽然 excel 自身支持很强大的功能, 也可以求和, 求平均值. 但是如果是稍微复杂的需求, 操作起来可能就没那么方便了.

    安装 xlrd

    pip install xlrd==1.2.0

    注意: 此处要指定版本号安装. 如果不指定版本号, 则安装最新版. 最新版里删除了对 xlsx 格式文件的支持.

    1. 编写代码
      使用 open_workbook 方法打开一个 excel 文件.
      使用 xlsx.sheet_by_index(0) 获取到 0 号标签页.
      使用 table.nrows 获取到表格的行数.
      使用 table.cell_value(row, col) 获取到表格中 row, col 位置的元素值
    import xlrd
    
    # 打开xlsx文件
    xlsx = xlrd.open_workbook('E:/程序人生/Python/excel/工作簿1.xlsx')
    # 获取指定的标签页
    table = xlsx.sheet_by_index(0)
    # 获取到表格中有多少行
    nrows = table.nrows
    # 进行循环遍历,跳过表头
    
    total = 0
    cnt = 0
    for i in range(1, nrows):
        classID = table.cell_value(i, 1)
        if classID == 1:
            total += table.cell_value(i, 2)
            cnt += 1
    print(f'分数:{total / cnt}')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    2.5 综合案例: 学生管理系统

    需求说明
    实现一个命令行版本的学生管理系统
    功能:

    • 新增学生
    • 显示学生
    • 查找学生
    • 删除学生
    • 存档到文件

    创建入口函数

    • 使用一个全局列表 students 表示所有学生信息.
    • 使用 menu 函数和用户交互. 这是一个自定义函数.
    • 使用 insert , show , find , delete 这几个自定义函数完成增删查操作.
    • 使用 sys.exit 实现程序退出
    import sys
    
    # 定义一个学生列表
    students = []
    
    
    def menu():
        print('|---------------------------|')
        print('|----1-增加学生信息-----------|')
        print('|----2-删除学生信息-----------|')
        print('|----3-查找学生信息-----------|')
        print('|----4-显示学生信息-----------|')
        print('|----0-退出------------------|')
        choice = int(input('请输入你的选择:'))
        return choice
    
    
    def insert():
        print('[新增学生开始]')
        studentID = int(input('请输入学生的学号'))
        name = input('请输入学生的姓名')
        gender = input('请输入学生的性别')
        if gender not in ('男', '女'):
            print('性别不符合要求,新增失败')
            return
        classID = int(input('请输入学生的班级'))
        student = {
            'studentID':studentID,
            'name': name,
            'gender': gender,
            'classID': classID
        }
        global students
        students.append(student)
        print('新增成功!')
    
    
    def delete():
        classID = int(input('请输入你要删除学生的学号:'))
        for s in students:
            if s['studentID'] == classID:
                print('删除学生: ', end=' ')
                print(f"学号:{s['studentID']}, 姓名:{s['name']}, 性别:{s['gender']}, 班级:{s['classID']}")
    
                students.remove(s)
                print('删除学生成功!')
                return
        print('删除学生失败!没有这个学生')
    
    
    def show():
        global students
        for s in students:
            print(f"学号:{s['studentID']}, 姓名:{s['name']}, 性别:{s['gender']}, 班级:{s['classID']}")
    
    
    def find():
        classID = int(input('请输入你要查找学生的学号:'))
        for s in students:
            if s['studentID'] == classID:
                print('查找成功!')
                print(f"学号:{s['studentID']}, 姓名:{s['name']}, 性别:{s['gender']}, 班级:{s['classID']}")
                return
        print('查找失败,没有这个人!')
    
    
    def main():
        print('|----------------------------|')
        print('|----欢迎来到学生成绩管理系统----|')
        print('|----------------------------|')
        while True:
            res = menu()
            if res == 0:
                sys.exit()
            elif res == 1:
                insert()
            elif res == 2:
                delete()
            elif res == 3:
                find()
            elif res == 4:
                show()
            else:
                print('你的输入有误!请重新输入:')
    
    main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
  • 相关阅读:
    全网最全最详细的Sharding-JDBC入门
    python计算密集型效率对比
    山东大学项目实训十六——可控音乐变压器Controllable Music Transformer
    python超细致带你批量获取美女内容~ 快来观赏叭
    365天挑战LeetCode1000题——Day 080 寻找重复的子树 岛屿的最大面积 统计子岛屿
    leetcode:854. 相似度为 K 的字符串【异位词最少交换次数 + bfs暴搜 + 多记录当前匹配到的idx + 剪枝】
    Win11 安装 Vim
    使用Go语言抓取酒店价格数据的技术实现
    LeetCode每日一练 —— 88. 合并两个有序数组
    【面试高频题】难度 1/5,经典树的搜索(多语言)
  • 原文地址:https://blog.csdn.net/qq_52809807/article/details/127709074