Python 基础语法七——模块

Posted 生活在于不断学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 基础语法七——模块相关的知识,希望对你有一定的参考价值。

注意事项:
        (1)、在IDLE交互环境中,当输入导入模块名和电号 "." 之后,系统会将模块的函数罗列出来供我们选择;
        (2)、可以通用 help(模块名) 查看模块的帮助信息,其中FUNCTIONS介绍了模块内置函数的使用方法;
        (3)、不管你执行了多少次 import , 一个模块只会被导入一次;
        (4)、导入模块后,我们就可用模块名称这个变量访问模块的函数等所有功能。
        定义:一般写的代码以.py结尾的Python文件就是一个独立的模块,模块包含了对象定义和语句。
    1、命名空间
        定义:是一个包含了一个或多个变量名称和它们各自对应的对象值的字典。
        python可以调用局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则在函数内部调用时局部变量会屏蔽全局变量。
        如果要修改函数内的全局变量的值,必须使用global语句,否则会出错。
    2、模块导入的三种方法
       2.1  方法一:最常用
        import module1,module2
        导入模块后,就可以引用模块内的函数,语法格式:模块名.函数名
        2.2 方法二:慎用
        from module import 函数名
        函数名如果有多个,可用逗号 “,” 隔开
        函数名可用通配符 “ * ” 导出所有的函数 
        这种方法,导出的函数名容易和其他函数名称冲突,失去了模块命名空间的优势。
        2.3  方法三:方便在程序中调用
          import module as 新名字
3、自定义模块和包
    3.1 自定义模块
        方法和步骤:
            在安装Python的目录下,新建一个以 .py 为后缀名的文件,然后编辑该文件。
    自定义模块要注意:
        (1)为了是 IDLE 能找到我们自定义模块,该模块要和调用的程序在同一目录下,否则在导入模块是会提示找不到模块的错误;
        (2) 模块名要遵循 Python 变量命名规范,不要使用中文、特殊字符等。
        (3) 自定义的模块名不要和系统内置的模块名相同,可以先在 IDLE 交互环境里先用 “import modle_name ” 命令检查,若成功说明系统已存在此模块,然后考更改自定义模块名。
    3.2 自定义包
        在大型项目开发中,有多个程序员协作共同开发一个项目,为了避免模块名重名,Python 引入了按目录来组织模块的方法,称为包(Package)。 包是一个分层级的文件目录结构,它定义了有模块及子包,以及子包下的子包等组成的命名空间。
        自定义包需注意:
        (1)每个包目录下面都会有一个_init_.py的文件,这个文件是必须存在的,否则,系统就把这个目录作为普通目录,而不是一个包。
        (2)_init_.py 可以是一个空文件,也可以有 Python 代码,因为_init_.py就是一个模块,而它的模块名就是 mymodle。
        (3)在 Python 中可以有多及目录,组成多层次的包结构。
4、安装第三方模块
    实现方法:通过包管理工具 pip 来实现。
        如 Win10系统:在安装Python 3.6.5 时勾选了 pip 和 Add Python to environment variables 两个选项。
        在 “ cmd ” 命令或直接选中“ 命令提示符 ” 
pip < command > [options]
command 命令说明
installinstall packages
downloadDownload packages
uninstallUninstall packages
freezeOutput installed packages in requirements format








    安装第三方模块前的注意事项:
    (1) 确保可以从命令提示符中的命令行运行Python。可以通过命令来检查:
               
     (2)确保可以从命令行运行 pip;
         
    (3) 确保 pip 、setuptools 和 wheel 是最新版本;
    虽然 pip 单独地从预构建的二进制文件中安装就可以了,但是最新的 setuptools 和 wheel 的版本对于确保你也可以从源文件中安装是有用的。
        可以运行一下命令测试:(会因为网络原因下不了,多试几次,实在不行离线安装)
    python -m pip install --upgrade pip setuptools wheel 

    (4)创建一个虚拟环境,此项仅用与 Linux 系统,为可选项。运行以下命令:
        python3 -m venv tutorial_env source tutorial_env/bin/activate
        将在tutorial_env 子目录中创建一个新的虚拟环境,并配置当前 shell 以将其作默认的 Python 环境。
5、安装第三方模块实例
        以从PyPI安装为例,使用 pip 从PyPI安装:pip 最常用的用法是从 Python 包中索引中使用需求说明符来安装。一般来说,需求说明符由项目名称和版本说明符组成。
        Python 官网: https://www.pypi.org 可以查询、注册、发布的第三方库,包括包的历史版本号,支持的应用环境等包信息。
        (1)在 Python 官网查询:web,得到包的名称(web3)和版本号 ( 4.3.0 ):
        命令提示符: pip install web==4.3.0 
        ( 2 ) 升级包:将已安装的项目升级到PyPIp的最新项目,
            pip install --upgrade web3
        ( 3 ) 安装到用户站点
        若要安装与当前用户隔离的包,请使用用户标志,通过运行以下命令:
            pip install --user SomeProject
        (4)安装需求文件
        安装需求文件中指定的需求列表,如果没有则忽略。通过运行以下命令:
        pip install -r requirements.txt
        (5)在Python shell 环境中验证安装的第三方模块:
        在IDLE shell 交互环境下使用 import 命令。
            import web3 
            dir(web3)
6、模块应用实例
        6.1 日期时间相关: datetime模块
        datetime 是 Python处理日期和时间的标准模块。
        (1)获取当前日期和时间:
from datetime import datetime

now = datetime.now()
print(now)
        (2)获取指定定日期和时间:
from datetime import datetime

now = datetime.now()
dt = datetime(2018,6,6,12,12)  # 用指定日期时间创建datetime
print(now)
print(dt)
        (3)datetime 转换为 timestamp 模块
              在计算机中,时间实际上是用数字表示的。我们把1970年1月1日 00:00:00 UTC + 00:00 时区的时刻称为 epoch time , 记为 0 (1970年以前的时间为复数),当前时间就是相对 epoch time 的秒数,称为 timestamp 。
        即:
        timestamp = 0 = 1970-1-1 00:00:00 UTC+0:00
        对应北京时间为:
        timestamp = 0 = 1970-1-1 00:00:00 UTC+8:00
        可见 timestamp 的值与时区毫无关系,因为 timestamp 一旦确定,其 UTC 时间就确定了,转换到任意时区的时间也是完全确定的,这就是为什么计算机存储的当前时间是以 timestamp 表示的,因为全球各地的计算机在任意时刻的 timestamp 都是完全相同的。
        把一个datetime 类型转换为 timestamp 只需要简单调用 timestamp() 方法,如下所示代码:
from datetime import datetime

now = datetime.now()
dt = datetime(2018,6,6,12,12)  # 用指定日期时间创建datetime

print(now)
print(dt)
print(dt.timestamp())
        Python 的 timestamp 是一个浮点数。如果有小数位,小数位表示毫秒数。某些编程语言(如Java 和 JavaScript)的 timestamp 使用整数表示毫秒,这种情况下只需要把timestamp 除以 1000 就得到 Python 的浮点表示方法。
        (4) timestamp 转换为 datetime
        要把 timestamp 转换 为 datetime,使用 datetime 提供的 fromtimestamp() 
from datetime import datetime

now = datetime.now()
dt = datetime(2018,6,6,12,12)  # 用指定日期时间创建datetime

print(now)
print(dt)
print(dt.timestamp())
        timestamp 是一个浮点数,它没有时区的概念,而 datetime 是有时区的,timsestamp 可以直接被转换到 UTC 标准时区的时间,使用 datetime 提供的 utcfromtimestamp() 方法。
        (5)str 转换为 datetime:
        用户输入的日期和时间是字符串,要处理日期和时间,首先必须把 str 转换为datetime 。转换方法通过 datetime 提供的 strptime() 方法来实现,如下列所示代码:
datee_test = datetime.strptime(\'2018-06-19 13:15:00\', \'%Y-%m-%d %H:%M:%S\')
print(datee_test)
        (6) datetime 转换为 str :
        如:已经有了datetime 对象,要把它格式为字符串显示给用户,就需要转换为str,通过datetime 提供的 strtime() 方法实现的;
now.strftime(\'%a, %b %d %H:%M\')
        (7) datetime 加减:对日期和时间进行加减,时间上就是把 datetime 往后或前计算,得到新的 datetime 。需要导入 timedelta 类,使用 timedelta 可以很容易地算出前几天后几天的时刻。
now = datetime.now()
datetime.datetime(2018, 6, 19, 14, 42, 36, 664596)
now + timedelta(hours=10)
now - timedelta(days=10)
now + timedelta(days=12, hours=23)
        (8)本地时间转换为 UTC 时间:
        本地时间是指系统设定时区的时间,例如北京时间是 UTC+8:00 时区的时间,而 UTC 时间值 UTC +0:00 时区的时间。
        datetime 类型有时区属性 tzinfo,默认值为 None,所以无法区分这个datetime 到底是哪个时区,除非强行给 datetime 设置一个时区,如下例所示代码。
        (9) 时区转换
        先通过 datetime 提供的 utcnow() 方法拿到当前的 UTC 时间,再用  astimezone() 方法转换为任意时区的时间;
7、读写 JSON 数据: json 模块
        JSON(JavaScript Object Notation)是一种轻量捷的数据交换格式。JSON数据格式等同于 Python 里面的字典格式,里面可以包含方括号括起来的数组,即 python 中的列表。
        在 python 中,json 模块专门处理 json 格式的数据,提供了四中方法: dumps \\ dump 、loads、load。
        7.1 dumps、dump:
        dumps、dump 实现序列化功能,但在使用功能上有差别。其中,dumps 实现的是将数据序列化为字符串(str),而在使用 dump 时,必须传文件描述符,将序列化的字符串(str) 保存到文件中。
        dumps 方法的使用:
import json

dict_test = { "01":"张三","02":"李四"}

#  将 字符串、数字、字典等数据序列化为标准的字符串( str )格式
json.dumps("Python")  # 字符串
json.dumps(15.78)       # 数字
json.dumps(dict_test)   # 字典
        dump 方法的使用:将字典数据保存到某个目录下
import json

dict_test = { "01":"张三","02":"李四"}

#  将 字符串、数字、字典等数据序列化为标准的字符串( str )格式
json.dumps("Python")  # 字符串
json.dumps(15.78)       # 数字
json.dumps(dict_test)   # 字典

# 使用 dump 方法将字典数据 dict_test 保存到 F 盘根目录下的 json_test.json文件中。
with open("F:\\\\json_test.json","w", encoding=\'utf-8\') as file_test:
    json.dump(dict_test,file_test,indent=5)
    7.2、loads 、load
        loads、load 是反序列化方法。loads 只完成了反序列化,load 只接收文件描述符,完成了读取文件和反序列化。
import json

#  使用 loads  和 load
teacher_info = json.loads(\'{"teacher_name":"Mr.Liu","teacher_age":24}\')
print(teacher_info)
with  open("F:\\\\json_test.json","r",encoding="utf-8") as file_test:
    test_loads = json.loads(file_test.read())
    file_test.seek(0)
    test_load = json.load(file_test)    # json.loads( file_test.read())
print(test_loads)
print(test_load)