模块导入
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:\cj\python\python_workspace\study\lesson_10_模块导入\lesson_10_os模块.py '''
获取一个文件或者文件夹的绝对路径path.abspath('文件名 或 文件夹名')
from os import path print(path.abspath('data'))#D:\cj\python\python_workspace\study\lesson_10_模块导入\data
②获取上一级路径
os.path.dirname(path)
import os #获取当前文件的绝对路径 file_path = os.path.abspath(__file__) print(file_path) #获取上一级的全部路径 print(os.path.dirname(file_path)) ''' D:\cj\python\python_workspace\study\lesson_10_模块导入\lesson_10_os模块.py D:\cj\python\python_workspace\study\lesson_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:\cj\python\python_workspace\study\lesson_10_模块导入 D:\cj\python\python_workspace\study D:\cj\python\python_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:\cj\python\python_workspace\study\lesson_10_模块导入\lesson_10_os模块.py D:\cj\python\python_workspace\study\lesson_10_模块导入 D:\cj\python\python_workspace\study\lesson_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:\cj\python\python_workspace\study\lesson_10_模块导入 '''
注意这个路径是会变的,看在哪个地方运行脚本。
如果是在terminal里面运行,结果如下:
D:\cj\python\python_workspace\study>python lesson_10_模块导入\lesson_10_os模块.py
D:\cj\python\python_workspace\study
②创建一个新的目录(文件夹)---→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,虽然定义的时候复杂些,但是调用的时候简单,节省时间。