Python的包(package)和模块(module)

Python的包(package)和模块(module)

一、Python的包(package)

包:初期理解为文件夹,用于装多个模块

作用:一种管理Python模块命名空间的形式,采用"点语法" os.path

包和文件夹之间的区别:Python的包中有一个特殊的文件__init__.py文件,前期里面不写任何内容,但是,就是为了告诉编译器,当前这个目录不是普通目录,是一个包

创建方式:选中工程,创建Python package(使用pycharm编辑器)
在这里插入图片描述

二、Python的模块(module)
1.概述

为了解决维护问题,一般情况下,在一个完整的项目中,会将特定的功能分组,分别放到不同的文件中,在使用的过程中,可以单独维护,各个不同的文件之间互不影响,每个.py文件就被称为一个模块,通过结合包的使用来组织文件

封装思路: 函数 => 类 => 模块 => 包 => 项目

优点:
a.提高了代码的可维护性
b.提高了代码的复用性【当一个模块被完成之后,可以在多个文件中使用】
c.引用其他的模块【第三方模块】
d.避免函数名和变量的命名冲突

2 os模块

提供有关于操作系统的函数,处理文件或者文件夹
**注意:**若path不是绝对路径,则认为是在当前py文件的地址执行相关操作

# os: operation system 操作系统
import os

print(os.name)
# nt--->windows
# posix --->Linux, MacOS

print(os.environ)
print(os.environ.get('PATH'))

# . 表示当前目录
# .. 表示上级目录
print(os.curdir)  # . 当前目录

# 当前路径
# 相对路径:从当前目录(或者项目目录)开始的路径
# 绝对路径:从磁盘根目录开始的完整路径
print(os.getcwd())  # C:\Users\75171\Desktop\Python2004\day11\code

# 后面的必须掌握
# listdir():获取指定路径下的所有文件或者目录的名字,以列表形式展示
print(os.listdir(r'path'))

# mkdir():新建目录
# os.mkdir('hello')
# os.makedirs('a/b/c')  # 可以递归创建目录

# 删除目录
# os.rmdir('hello')
# os.rmdir('a')  # OSError: [WinError 145] 目录不是空的。: 'a'

# 删除文件
# os.remove('a.txt')

# 重命名
# os.rename('a','aaa')
# os.rename(r'aaa/b/a.txt','aaa/b/bbb.txt')

# 文件属性
print(os.stat('aaa/b/bbb.txt'))

# os.path
# os.path.join():将多个路径拼接
print(os.path.join(r'path1','name'))  # 一般两个,也可以三个

# os.path.split():拆分
print(os.path.split(r'C:\Users\75171\Desktop\Python2004\day11\code\aaa'))
# 'C:\Users\75171\Desktop\Python2004\day11\code'   'aaa'
#  os.path.splitext():将文件的名称和扩展名拆分
print(os.path.splitext('ccc.py'))  # ('ccc', '.py')

# os.path.getsize():获取文件大小
print(os.path.getsize('path'))  # 1639

# os.path.abspath(): 获取指定文件的绝对路径
print(os.path.abspath('bbb.txt'))  # C:\Users\75171\Desktop\Python2004\day11\code\bbb.txt

# __file__:当前文件名
print(os.path.abspath(__file__))  # C:\Users\75171\Desktop\Python2004\day11\code\os.py

file_path = r'C:\Users\75171\Desktop\Python2004\day11\code\os.py'
dir_path = r'C:\Users\75171\Desktop\Python2004\day11\code'
# os.path.exist() :判断文件或目录是否存在
print(os.path.exists(file_path))
print(os.path.exists(dir_path))

# os.path.isfile():是否为文件
print(os.path.isfile(file_path))  # True
print(os.path.isfile(dir_path))  # False

# os.path.isdir():是否为文件
print(os.path.isdir(file_path))  # False
print(os.path.isdir(dir_path))  # True

# os.path.dirname():父目录/上一级目录
print(os.path.dirname(dir_path))  # C:\Users\75171\Desktop\Python2004\day11

# os.path.basename():文件名
print(os.path.basename(file_path))  # os.py
3.自定义模块【掌握】
3.1自定义import模块
#1.格式:import  包1.包2.模块的名称
#注意1:通过点语法区分包的层级关系
#引入模块

#注意2:如果要同时导入多个模块,有两种方式
#方式一
"""
import os
import datetime
import math
"""
#方式二
import os,math,datetime

#注意3:当导入自定义模块的时候,需要注意包的存在
#注意5:当通过import将模块导入的时候,将模块对应的文件整个加载了一遍
import ccc.module
import moduleTextDemo01

print("***************")

#注意4:当模块有包的层级关系时,需要调用其中函数的时候,需要指明函数的路径
ccc.module.test()     #os.path.isdir()

moduleTextDemo01.fun1()
moduleTextDemo01.fun2()
moduleTextDemo01.fun3()

print(moduleTextDemo01.num)
3.2自定义from-import模块
#form 模块名  import 函数名1/类名,函数名2.。。。
#import  moduleTextDemo01
from moduleTextDemo01 import  fun1,fun2,fun3

#注意:采用了form。。。import的方式导入指定的函数之后,可以直接调用函数
fun1()
fun2()
fun3()

#好处:进行局部的导入,避免内存空间的浪费


#注意:当前文件中如果存在和模块中同名的函数的时候,当前文件中的函数仍然会将模块中的函数给覆盖掉
def fun1():
 print("hello")

fun1()
3.3自定义from-import*模块
#from 。。。。 import  *      *代表全部
"""
下面三种导入方式完全等价:将moduleTextDemo01模块中的所有的内容全部导入
from moduleTextDemo01 import  *
import moduleTextDemo01
from  moduleTextDemo01 import  fun1,fun2,fun3
"""
from moduleTextDemo01 import  *

fun1()

总结:在python中,每个py文件其实都是一个模块,如果跨模块调用函数,则采用导入的方式

将不同的功能进行划分,调用函数的时候相对比较方便的

4.__name__属性和dir函数

__name__的作用:如果不想让模块中的某些代码执行,可以通过属性仅仅调用程序中的一部分功能
【写在if判断中的代码只有当前模块被执行的时候才会被执行,检测到是其他的文件在使用当前的模块,则if语句中的代码不会被执行】

def fun1():
 print("aaa")

def fun2():
 print("bbb")

def fun3():
 print("ccc")


#作用:写在下面判断中的代码,只有当前模块运行的时候才会被执行【起到屏蔽的作用】,其他文件想import此文件,以下函数不会被执行
if __name__ == "__main__":
 fun1()
 fun2()
 fun3()

dir:获取指定模块里面的所有的内容

dir(模块名称)  返回的是一个列表
print(dir(math))
print(dir(moduleTextDemo01))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值