Bootstrap

24.10.30 Python 包和模块

Python包和模块

当使用Python编程时,包(Packages)和模块(Modules)是两个关键的概念,它们有助于组织、管理和复用代码。

模块(Modules)

什么是模块

一个.py 文件就是一个模块

模块是含有一系列数据函数等的程序

  • 作用

    把相关功能的函数等放在一起有利于管理,有利于多人合作开发

  • 模块的分类

    1. 内置模块(在python3 程序内部,可以直接使用)

    2. 标准库模块(在python3 安装完后就可以使用的 )

    3. 第三方模块(需要下载安装后才能使用)

    4. 自定义模块(用户自己编写)

    模块名如果要给别的程序导入,则模块名必须是 标识符

导入模块

  • 语法

  1. import 模块名  [as 模块新名字1]

    导入一个模块到当前程序

  2. from 模块名 import 模块属性名 [as 属性新名]

    导入一个模块内部的部分属性到当前程序

  3. from 模块名 import *

    导入一个模块内部的全部属性到当前程序

  • 模块的内部属性

    __file__  绑定模块的路径
    __name__  绑定模块的名称
           如果是主模块(首先启动的模块)则绑定 '__main__'
           如果不是主模块则 绑定 xxx.py 中的 xxx 这个模块名

 

  • 模块的 __name__ 属性

    每个.py 模块文件都会有 __name__ 属性

    1. 当一个模块是最先运行的模块,则这个模块是主模块, 主模块的__name__ 属性绑定'__main__' 字符串

    2. 如果一个模块是用 三种 import 语句中的一个导入的模块,则此模块不是主模块。

      不是主模块的模块的 __name__ 绑定的 模块名

  • 主模块 (__name__ == '__main__'): 当一个模块是直接运行的,即不是通过 import 语句导入的,那么它的 __name__ 属性会被赋值为 '__main__'

 被导入的模块 (__name__ == 模块名): 当一个模块被导入到另一个模块中时,它的 __name__ 属性会被赋值为它的模块名。

 

python 的第三方模块

PyPI · The Python Package Index

  • 使用导入的模块中的函数、变量等,可以通过模块名或从语句中导入的名称来访问。

 

Python 常用的内建模块

random 模块

先引入random库基础库:

import random
函数描述
random.choice(seq)从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
random.randrange (start, stop,step)从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1
random.random()随机生成下一个实数,它在[0,1)范围内。
random.shuffle(list)将序列的所有元素随机排序,修改原list
uniform(x, y)随机生成实数,它在[x,y]范围内.
time 模块

time --- 时间的访问和转换 — Python 3.13.0 文档

时间戳:从 1970年1月1日 0:0:0 UTC 时间 开始计时到现在的秒数

UTC 时间 : 世界协调时间

struct_time 用 含有9个元素的元组来表示时间

 

import time

time.time()  # 返回当前时间的时间戳
time.ctime()  # 返回当前的UTC 时间的字符串
t1 = time.localtime()  # 返回当前的本地时间元组
time.struct_time((2021, 7, 21, 17, 37, 41, 0, 0, 0))
time.sleep(3)  # time.sleep(n)  # 让程序睡眠 n 秒
time.strftime("%Y-%m-%d", t1)  # 格式化时间
time.strftime("%y-%m-%d", t1)
time.strftime('%Y-%m-%d %H:%M:%S', t1)
# 用时间元组来创建一个自定义的时间
t2 = time.struct_time((2021, 1, 1, 10, 11, 20, 0, 0, 0))
datetime 模块

datetime --- 基本日期和时间类型 — Python 3.13.0 文档

 

os 模块
os 模块

os模块是Python标准库中的一部分,提供了一种与操作系统进行交互的方法。主要功能包括文件和目录的操作、路径处理、进程管理等。在使用os模块之前,我们需要先导入它:

import os

os.getcwd(): 获取当前工作目录

os.chdir(path): 改变当前工作目录

os.listdir(path='.'): 返回指定目录下的所有文件和目录列表

os.mkdir(path): 创建目录 

os.rmdir(path): 删除目录 

os.remove(path): 删除文件 

path 模块

os.path 模块是 Python 标准库的一部分,专门用于处理文件和目录路径的操作。它提供了一系列函数,用于操作和处理文件路径,使得路径操作更加方便和跨平台。

os.path.basename(path): 返回路径中最后的文件名或目录名

 os.path.dirname(path): 返回路径中的目录部分

os.path.join(*paths): 将多个路径合并成一个路径

os.path.split(path): 将路径分割成目录和文件名

os.path.splitext(path): 将路径分割成文件名和扩展名

os.path.exists(path): 检查路径是否存在

os.path.isfile(path): 检查路径是否是文件

os.path.isdir(path): 检查路径是否是目录

包(Packages)

包的定义和作用

定义

  • 包是将模块以文件夹的组织形式进行分组管理的方法,以便更好地组织和管理相关模块。

  • 包是一个包含一个特殊的__init__.py文件的目录,这个文件可以为空,但必须存在,以标识目录为Python包。

  • 包可以包含子包(子目录)和模块,可以使用点表示法来导入。

作用

  • 将一系列模块进行分类管理,有利于防止命名冲突

  • 可以在需要时加载一个或部分模块而不是全部模块

 

导入包和子包

  • 使用import关键字可以导入包和子包,以访问其中的模块和内容。

使用包和子包

  • 使用导入的包和模块的内容,可以通过包名和点表示法来访问。

__init__.py文件

__init__.py 文件的主要作用是用于初始化Python包(package)或模块(module),它可以实现以下功能:

  1. 标识包目录: 告诉Python解释器所在的目录应被视为一个包或包含模块的包。没有这个文件,目录可能不会被正确识别为包,导致无法导入包内的模块。

  2. 执行初始化代码: 可以包含任何Python代码,通常用于执行包的初始化操作,如变量初始化、导入模块、设定包的属性等。这些代码在包被导入时会被执行。

  3. 控制包的导入行为: 通过定义 __all__ 变量,可以明确指定哪些模块可以被从包中导入,从而限制包的公开接口,防止不需要的模块被导入。

  4. 提供包级别的命名空间: __init__.py 中定义的变量和函数可以在包的其他模块中共享,提供了一个包级别的命名空间,允许模块之间共享数据和功能。

  5. 批量导入模块: 可以在 __init__.py 文件中批量导入系统模块或其他模块,以便在包被导入时,这些模块可以更方便地使用。

 

第三方包

Python第三方包是由Python社区开发的,可用于扩展Python功能和解决各种问题的软件包。这些包提供了各种各样的功能,包括数据分析、机器学习、网络编程、Web开发、图形处理、自然语言处理等。

安装和使用

使用pip:pip是Python的包管理工具,用于安装、升级和管理第三方包。确保你的Python安装中包含了pip。

安装第三方包:

  • 使用pip安装包:在命令行中运行以下命令来安装包,将"package-name"替换为要安装的包的名称。

    pip install package-name
    ​
  • 安装特定版本的包:如果你需要安装特定版本的包,可以使用以下命令:

    pip install package-name==version
    ​
  • 通过镜像安装,可以使用以下命令:

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package1 package2 package3 ...
    ​
  • 从requirements文件安装:你可以将要安装的包及其版本记录在一个文本文件中,通常命名为requirements.txt,然后运行以下命令安装其中列出的所有包:

    pip install -r requirements.txt
     
  1. 导入包:在Python脚本或交互式环境中,使用import语句导入已安装的包,以便在代码中使用它们。

    import package_name
  2. 使用包:每个第三方包都有不同的用法和功能,通常伴随着官方文档和示例代码。你可以查阅官方文档,或者使用help()函数来了解包的功能和方法。示例:

    import package_name
    help(package_name)
  3. 更新和卸载包:

    • 更新包:使用以下命令来更新已安装的包:

      pip install --upgrade package-name
      ​
    • 卸载包:如果你想卸载包,可以使用以下命令:

      pip uninstall package-name

依赖清单

可以使用pipreqs来维护requirements.txt文件,以便轻松地重建环境。

pipreqs是一个用于管理Python项目依赖清单的工具,它会自动分析项目代码,并生成requirements.txt文件,列出项目所需的所有依赖包及其版本。以下是使用pipreqs管理依赖清单的步骤:

安装pipreqs

如果你还没有安装pipreqs,可以使用pip安装它(比较慢,可能会丢包):

pip install pipreqs   

在项目目录中运行pipreqs

进入你的项目目录,然后运行以下命令:

pipreqs .
​

这会分析项目代码,并在当前目录下生成一个名为requirements.txt的文件,其中包含了项目所需的所有依赖包及其版本。

如果遇到编码错误UnicodeDecodeError,则将指定编码为utf8:

pipreqs ./ --encoding=utf8
pipreqs ./ --encoding=gbk
pipreqs ./ --encoding='iso-8859-1' 

查看生成的requirements.txt文件

打开requirements.txt文件,你将看到列出的依赖包及其版本,类似于以下内容:

package1==1.0.0
package2==2.1.3
...
​

选择是否要修改requirements.txt文件

pipreqs生成的requirements.txt文件可能包含一些不必要的依赖,或者可能需要手动指定特定版本。

你可以编辑requirements.txt文件,根据项目的需要添加、删除或修改依赖项。

  1. 安装依赖

    一旦你准备好了requirements.txt文件,你可以使用pip来安装项目的依赖:

    pip install -r requirements.txt
    ​
  2. 定期更新依赖

    定期使用pipreqs重新生成requirements.txt文件,以确保依赖清单保持最新。你可以使用以下命令:

    pipreqs .
    ​

pipreqs是一个方便的工具,它可以帮助你自动创建和维护项目的依赖清单。不过,需要记住,生成的依赖清单可能包含一些不必要的依赖,因此你应该仔细检查和编辑requirements.txt文件以确保它反映了项目的真实需求。

Python的包和模块是组织、管理和重用代码的重要工具。它们有助于将代码划分为可管理的单元,提高了代码的可读性和可维护性。通过模块和包,你可以更有效地组织项目,减少命名冲突,以及在不同项目之间重用代码,从而更轻松地进行Python编程。通过上述参考案例,你可以更好地理解如何在实际项目中应用这些概念

 

Python JSON 数据解析

JSON(JavaScript Object Notation)是一种轻量级数据交换格式,它易于阅读和编写,同时也易于机器解析和生成。Python提供了内置的JSON模块,用于处理JSON数据。

import json


def json_demo():
    data = {'name': 'zhangsan',
            'age': '23',
            'sex': 'man'}
    # 序列化
    # 将字典对象转为json字符串
    json_str = json.dumps(data)
    print(json_str)

    # 反序列化
    # 将json字符串转为字典对象
    data1 = json.loads(json_str)
    print(data1)

    # dump:将json存入文件,文件需要先用open打开,生成一个file对象
    json.dump(data, open('test.json', 'w'))
    # load:从文件中读取json,文件需要先打开
    with open('test.json', 'r') as f:
        data2 = json.load(f)
        print(data2)

    data3 = {'name': 'wangwu',
             'info': {'age': '24',
                      'sex': 'woman'
                      }
             }

    name = data3['name']
    print(name)
    age = data3['info']['age']
    print(age)

    data4 = {'name': 'zhangsan', 'score': [20, 30, 40, 50], 'info': {'hobby': ['basketball', 'football']}}
    # 获取score
    score = data4['score'][1]
    print(score)
    # 获取info
    hobby = data4['info']
    print(hobby['hobby'][0])


if __name__ == '__main__':
    json_demo()

;