zoukankan      html  css  js  c++  java
  • Python基础语法 第10节课(模块导入)

    模块导入

    1.模块:.py文件 就是模块(实际上.pyc  .pyo pyd so dll)是动态库

        包:包含了__init__.py模块的文件夹(目录)

    2.建立模块、包

       ①建立一个包:在project上new→python Package((里面会自动生成一个__init__.py模块)

       ②建立一个模块 在包上new→python file

    注意:directory 不是包,里面没有__init__.py模块

    3.模块 和 包 的作用:为了组织代码  方便管理

    4.如何在一个模块中调用别的模块的代码?

             

             

     ①模块导入:使用其他模块的函数、变量、类

    ②模块导入的方法(2种)

        1)import  。。。

      ♥import 路径.路径.模块名(路径从你的项目根目录下面的一个级开始)

        import  lesson_10_模块导入.lesson_10_模块是什么

      ♥ import 包名称

    举例:

     

    2)from 。。。import。。。(简化其他模块的调用)

      最常用的导入模块的方法

      ♥from lesson_10_模块导入 import   lesson_10_模块是什么

    因为导入模块进来,被导入的模块里面的代码都可以调用

    from lesson_10_模块导入 import lesson_10_模块是什么
    lesson_10_模块是什么.visit('http://www.baidu.com')

     再来看看下面的方法,直接把具体函数导入,简化调用过程

    from lesson_10_模块导入.lesson_10_模块是什么 import visit
    print(visit(('http://www.baidu.com')))

    这个方法就是,每次调用函数,都要导入一次,太麻烦。(有利有弊)

    5.模块分类

    内置模块:python自带的。import os

    第三库模块:别人写好的模块,需要安装。pip install requests

    自定义模块:自己写的模块,通常放在包,即from 包 import 模块

    6.扩展内容(暂时不需要自己写,能看懂)

    ①from .....import *   从模块当中导入所有的代码

    慎用!!导入的所有代码里,可能有函数名与本模块里的函数名重名,最后调用的是哪个函数,自己都不清楚。

    ②from .....import sth as other        表示as 重命名,别名

    from lesson_10_模块导入.lesson_10_模块是什么 import visit as visit_another

    7.模块导入的搜索路径(了解)

    import sys

    print(sys.path)#返回的是一个列表

    8.__name__:表示当前文件的模块名

    ♥运行文件、脚本:①是特殊模块,我们是通过这个文件运行程序的

    通过模块导入形式运行的代码,_ _name_ _就是文件名、模块名称

    直接运行的文件、脚本,_ _name_ _j就不是文件名、模块名,而是固定的: _ _main_ _

    如下例子:

    demo_1.py 和demo_2.py是导入的模块

    lesson_10_模块导入1.py是运行程序,脚本,运行结果如下:

    ♥ _ _name_ _的使用

    运行程序的运行结果:只有运行程序里面的_ _name_ _是_ _main_ _,demo_1.py,demo_2.py的if条件不符合。

     

     如果把_demo_1.py,demo_2.py里面的if条件去掉,只有

    print('正在打印demo_1')   和    print('正在打印demo_2')
    再在运行程序lesson_10_模块导入1.py中运行,结果就是:

     因为在 lesson_10_模块导入1.py导入了demo_1.py,demo_2.py。

     ♥♥现在来说_ _name_ _的使用:

    可以在main里面写测试代码。因为在main里运行代码,就可以测试这个模块。如果是从别的模块导入的,别的模块的代码是不会执行的。

    以上:总结

    1.不建议直接导入包(暂时),现在是通过包 . 模块的方式,直接导入模块

    2.import sth

      ①通常来说import是来导入包和模块

      ②不能直接导入函数,类、对象,eg.import 模块.函数(X)

      ③通常用在内置模块 第三方模块

    3.from  sth import sth -----→可以导入模块,函数、类、变量、自定义模块

    4.from sth import  * -------慎用

    5.导入自定义模块,要从项目的根目录下一级开始

    6.from sth import sth as other (取别名)

    7.from . import sth  -------→相对路径导入 慎用(大型项目的路径层级太多的时候用)-----不被Python的官方推荐

    OS模块-----内置模块

    1.内置模块 OS ,直接import OS就可以用了

    2.作用:专门处理系统相关的问题

    import os
    
    #按住ctrl ,鼠标点os,就可以进入OS模块了,里面有很多模块

    3.os里面的子模块path

    导入path的两种方式

    os.path 主要处理系统路径相关的操作

    #方法一
    import os.path
    #方法二
    from os import path

    4.区分_ _file_ _跟 _ _name_ _

    print(_ _file_ _) 获取当前文件的路径,可以是绝对路径,也可以是相对路径

    print(_ _name_ _) 获取当前模块名,没有路径

    5.获取路径

    什么是绝对路径:从系统的盘符或者系统的根目录开始(项目以内或者项目以外的路径都可以表示)

    什么是相对路径:一个路径相对于另一个路径的说法

    ①获取文件的绝对路径

    os.path.abspath(_ _file_ _)--------------使用频率最高,因为绝对路径不会变

    print(os.path.abspath(_ _file_ _))

    import os
    #获取当前文件的绝对路径
    file_path = os.path.abspath(__file__)
    print(file_path)
    '''
    D:cjpythonpython_workspacestudylesson_10_模块导入lesson_10_os模块.py
    '''

    获取一个文件或者文件夹的绝对路径path.abspath('文件名 或 文件夹名')

    from os import path
    print(path.abspath('data'))#D:cjpythonpython_workspacestudylesson_10_模块导入data

    ②获取上一级路径

    os.path.dirname(path)

    import os
    #获取当前文件的绝对路径
    file_path = os.path.abspath(__file__)
    print(file_path)
    
    #获取上一级的全部路径
    print(os.path.dirname(file_path))
    '''
    D:cjpythonpython_workspacestudylesson_10_模块导入lesson_10_os模块.py
    D:cjpythonpython_workspacestudylesson_10_模块导入
    '''

     获取上几级目录,直接取下一级目录作为参数

    import os
    #获取当前文件的绝对路径
    file_path = os.path.abspath(__file__)
    # print(file_path)
    
    #获取上一级的全部路径
    dir_path  = os.path.dirname(file_path)
    print(dir_path)
    #获取上上级目录
    print(os.path.dirname(dir_path))
    #获取上上上级目录
    print(os.path.dirname(os.path.dirname(dir_path)))
    '''
    D:cjpythonpython_workspacestudylesson_10_模块导入
    D:cjpythonpython_workspacestudy
    D:cjpythonpython_workspace
    '''

    ③os.path.join(a,b) 连接2个部分的路径,组成一个完整的路径,-------只是得到一个路径的表示,并不表示这个文件或者路径真的存在

    即:得到的路径就是一个字符串,字符串的内容格式是个路径格式

    import os
    #获取当前文件的绝对路径
    file_path = os.path.abspath(__file__)
    print(file_path)
    
    #获取上一级的全部路径
    dir_path  = os.path.dirname(file_path)
    print(dir_path)
    
    #路径拼接
    print(os.path.join(dir_path,'demo.txt'))
    '''
    D:cjpythonpython_workspacestudylesson_10_模块导入lesson_10_os模块.py
    D:cjpythonpython_workspacestudylesson_10_模块导入
    D:cjpythonpython_workspacestudylesson_10_模块导入demo.txt
    
    '''

    如果真的要创建这个文件,可以用open函数,’w‘模式打开在该路径下创建这个txt文件

    #路径拼接
    txt_path = os.path.join(dir_path,'demo.txt')
    print(txt_path)
    
    #在该路径下创建txt文件
    with open(txt_path,'w') as f:
        f.write('new txt file')

    注意,os.path.join(a,b),括号里面可以加多个参数(路径),因为它的模块定义时,最后一个参数写的是可变长参数

    def join(path, *paths):
        path = os.fspath(path)
        if isinstance(path, bytes):
            sep = b'\'
            seps = b'\/'
            colon = b':'
    .
    .
    .

    6.拓展知识

    ①获取当前的工作目录---→os.getcwd()

    #获取当前的工作目录
    import os
    print(os.getcwd())
    '''
    D:cjpythonpython_workspacestudylesson_10_模块导入
    '''

    注意这个路径是会变的,看在哪个地方运行脚本。

    如果是在terminal里面运行,结果如下:

    D:cjpythonpython_workspacestudy>python lesson_10_模块导入lesson_10_os模块.py
    D:cjpythonpython_workspacestudy

    ②创建一个新的目录(文件夹)---→os.mkdir(),没有该文件夹才可以,已经有了就不能创建了

    #创建一个新的目录(文件夹)
    import os
    print(os.mkdir('sub_path'))#在左边的项目框架下创建一个路径
    sub_path

    再运行一遍再次创建,会报错,该文件已存在

    #创建一个新的目录(文件夹)
    import os
    print(os.mkdir('sub_path'))
    '''
        print(os.mkdir('sub_path'))
    FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'sub_path'
    '''

    ③判断一个文件存不存在---→os.path.exists())  返回结果是True False

    import os
    print(os.mkdir('sub_path'))
    
    # ③判断一个文件存不存在
    print(os.path.exists('sub_path'))
    '''
    True
    '''

    总结:os.path.exists()) 跟os.mkdir()配合起来使用

    #判断路径是否存在,不存在就创建新的路径
    import os
    if not os.path.exists('subbdor'):
        print(os.mkdir('subbdor'))

    其中'subbdor'可以是相对路径,也可以是绝对路径

    ④判断路径是不是一个文件还是目录

    os.path.isfile()
    os.path.isdir()
    import os
    #判断路径是不是一个文件
    os.path.isfile()
    
    #判断路径是不是一个目录
    os.path.isdir()

    7.关于import os 跟from os import path的比较

    编写程序时,应该是接受定义的复杂,不能接受调用的复杂

    所以应该最好使用的是from os import path,虽然定义的时候复杂些,但是调用的时候简单,节省时间。

  • 相关阅读:
    Codeforces 858B
    区域赛前立FLAG
    GCJ Practice Contest
    UVa 10004 Bicoloring
    UVa 784 Maze Exploration
    Pacemaker+ISCSI实现Apache高可用-环境准备
    多机免密互信
    HAPROXY + Keepalived
    LVS+KEEPALIVED
    oracle-数据库被注入恶意攻击程序的案例恢复
  • 原文地址:https://www.cnblogs.com/ananmy/p/12885859.html
Copyright © 2011-2022 走看看