Python包和模块
当使用Python编程时,包(Packages)和模块(Modules)是两个关键的概念,它们有助于组织、管理和复用代码。
1. 模块(Modules)
1.1 什么是模块
一个.py 文件就是一个模块
模块是含有一系列数据,函数,类等的程序
-
作用
把相关功能的函数等放在一起有利于管理,有利于多人合作开发
-
模块的分类
-
内置模块(在python3 程序内部,可以直接使用)
-
标准库模块(在python3 安装完后就可以使用的 )
-
第三方模块(需要下载安装后才能使用)
-
自定义模块(用户自己编写)
模块名如果要给别的程序导入,则模块名必须是 标识符
-
## file: mymod.py
'''
小张写了一个模块,内部有两个函数,两个字符串
... 此处省略 200字
'''
name1 = 'audi'
name2 = 'tesla'
def mysum(n):
'''
此函数用来求和
'''
print("正在计算, 1 + 2 + 3 + .... + n的和 ")
def get_name():
return "bmw"
调用模块
## file: test_mod.py
## 小李写的程序,小李想调用 小张写的 mymod.py 里的两个函数和两个字符串
## 用import 语句导入模块
import mymod
print(mymod.name1) # Audi
print(mymod.name2) # tesla
mymod.mysum(100) # 调用 mymod 模块里的 mysum 函数
print(mymod.get_name())
1.2 导入模块
-
语法
-
import 模块名 [as 模块新名字1]
导入一个模块到当前程序
-
from 模块名 import 模块属性名 [as 属性新名]
导入一个模块内部的部分属性到当前程序
-
from 模块名 import *
导入一个模块内部的全部属性到当前程序
-
示例
import mymod
mymod.mysum(10) # 要加模块名
from mymod import get_name
print(get_name()) # 调用get_name 时不需要加 "模块名."
from mymod import *
print(get_name())
print(name2)
-
模块的内部属性
__file__ 绑定模块的路径 __name__ 绑定模块的名称 如果是主模块(首先启动的模块)则绑定 '__main__' 如果不是主模块则 绑定 xxx.py 中的 xxx 这个模块名
-
示例
见: test_mymod.py 和 mymod.py
-
模块的
__name__
属性每个.py 模块文件都会有
__name__
属性-
当一个模块是最先运行的模块,则这个模块是主模块, 主模块的
__name__
属性绑定'__main__'
字符串 -
如果一个模块是用 三种 import 语句中的一个导入的模块,则此模块不是主模块。
不是主模块的模块的
__name__
绑定的 模块名
-
-
主模块 (
__name__
=='__main__'
): 当一个模块是直接运行的,即不是通过import
语句导入的,那么它的__name__
属性会被赋值为'__main__'
。例如:
# main_module.py if __name__ == "__main__": print("This is the main module.")
如果运行 python main_module.py
,输出将是:
This is the main module.
-
被导入的模块 (
__name__
== 模块名): 当一个模块被导入到另一个模块中时,它的__name__
属性会被赋值为它的模块名。例如:
# main_module.pyif __name__ == "__main__":
print("This is the main module.")
-
被导入的模块 (
__name__
== 模块名): 当一个模块被导入到另一个模块中时,它的__name__
属性会被赋值为它的模块名。例如: -
# imported_module.py print(f"This module's name is {__name__}") # 被其他模块导入时会自动运行 # main_module.py import imported_module if __name__ == "__main__": print("This is the main module.")
1.3 Python 常用的内建模块
1.3.1 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]范围内.
生成随机数
文档位置: random --- 生成伪随机数 — Python 3.13.2 文档
import random
#从a到b获取随机整数
x = random.randint(1, 10)
print(x)
#从0到1范围内获取一个浮点数
x = random.random()
print(x)
#从序列中随机去一个
x = random.choice((1, 2, 34, 13))
print(x)
#随机打乱序列的顺序
l = list(range(10))
random.shuffle(l)
print(l)
写一个程序, 生产6位由数字组成的随机密码
def Pass_world():
s = ''
for i in range(6):
s += str(random.randint(0,9))
print(f'你的随机密码为{int(s)}')
Pass_world()
1.3.2 time 模块
time 模块提供了与时间相关的基础功能,主要基于 时间戳(从 1970 年 1 月 1 日开始的秒数)和 结构化时间(struct_time
)进行操作。
时间戳:从 1970年1月1日 0:0:0 UTC 时间 开始计时到现在的秒数
UTC 时间 : 世界协调时间
struct_time 用 含有9个元素的元组来表示时间
获取当前时间戳
#生成时间戳;从1970.1.1 0:0:0开始到当前时间的差值
import time
def Time():
t = time.time()
print(f'当前时间戳{t}')
Time()
time.sleep(3)
Time()
t = time.time()
print(time.localtime(t))
1.3.3 datetime 模块
datetime 模块提供了更高级的时间处理功能,支持日期和时间的计算、格式化等操作。它主要包含以下几个类:
-
datetime.date:处理日期(年、月、日)。
-
datetime.time:处理时间(时、分、秒、微秒)。
-
datetime.datetime:处理日期和时间。
-
datetime.timedelta:处理时间间隔
import datetime
now = datetime.datetime.now()
print(now)
formated_date = now.strftime('%Y-%m-%d %H:%M:%S')
print(formated_date)
date_str = "2023-10-25 14:29:27"
data_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
print(data_obj)
from datetime import datetime, timedelta
# 获取当前日期和时间
now = datetime.now()
# 计算 3 天后的日期和时间
future = now + timedelta(days=3)
print("3 天后的时间:", future)
# 计算 2 小时前的时间
past = now - timedelta(hours=2)
print("2 小时前的时间:", past)
#3 天后的时间: 2023-10-28 14:29:27.123456
#2 小时前的时间: 2023-10-25 12:29:27.123456
1.3.4 os 模块
os 模块
os
模块是Python标准库中的一部分,提供了一种与操作系统进行交互的方法。主要功能包括文件和目录的操作、路径处理、进程管理等。在使用os
模块之前,我们需要先导入它:
import os
#1.os.getcwd():获取当前工作目录
current_directory = os.getcwd()
print(current_directory)
#2.os.chdir(path):改变当前工作目录
new_directory = r"D:\study\python\pythonProject2\python\ddd"
os.chdir(new_directory)
print("工作目录已更改为:", os.getcwd())
#3.os.listdir(path = '.'):返回指定目录下的所有文件和目录列表
directory_path = '.'
files_and_dirs = os.listdir(directory_path)
print(files_and_dirs)
#4.os.mkdir(path):创建目录
new_directory = 'new_directory'
os.mkdir(new_directory)
# 5.os.rmdir(path):删除目录只能删除空目录
del_directory = 'new_directory'
os.rmdir(del_directory)
#6. os.remove(path):删除文件
file_to_remove = r'D:\study\python\pythonProject2\python\ddd\text.py'
os.remove(file_to_remove)
#7. 修改文件名称
old_name = 'text.txt'
new_name = '文本.txt'
if os.path.exists(old_name):
os.rename(old_name,new_name)
print(f'文件名已经更改')
else:
print(f'文件名不存在')
os.path 模块
os.path
模块是 Python 标准库的一部分,专门用于处理文件和目录路径的操作。它提供了一系列函数,用于操作和处理文件路径,使得路径操作更加方便和跨平台。
import os
#1. os.path.basename(path):返回路径中最后的文件名或者目录名
path = r'D:\study\python\pythonProject2\python'
print(os.path.basename(path))
#2. os.path.dirname(path):返回路径中的目录部分
path = r'pythonProject2\new'
print(os.path.dirname(path))
#3. os.path.join(*paths):将多个路径拼接
path1 = r'python\basic'
path2 = r'ddd\__init__.py'
print(os.path.join(path1,path2))
# 4. os.path.exists(path):检查路径是否存在
path = r'D:\study\python\pythonProject2\python\basic'
print(os.path.exists(path))
# 5. os.path.isfile(path):检查是否是文件
path = r'day9.包.py'
print(os.path.isfile(path))
# 6. os.path.isdir(path):检查是否是目录
path = r'day9.包.py'
print(os.path.isdir(path))
os.walk()
os.walk()
是 Python 中用于遍历目录树的函数,它可以帮助你递归地访问指定目录下的所有文件和子目录。os.walk()
返回一个生成器(generator),每次迭代会生成一个三元组 (root, dirs, files)
,分别表示当前目录路径、当前目录下的子目录列表和当前目录下的文件列表。
语法
import os for root, dirs, files in os.walk(top, topdown=True, οnerrοr=None, followlinks=False): # 处理逻辑
参数说明:
-
top
:-
要遍历的根目录路径(字符串类型)。
-
-
topdown
(可选):-
如果为
True
(默认值),则从根目录开始遍历(自上而下)。 -
如果为
False
,则从最深层子目录开始遍历(自下而上)。
-
-
onerror
(可选):-
一个回调函数,用于处理遍历过程中发生的错误。
-
-
followlinks
(可选):-
如果为
True
,则会遍历符号链接指向的目录。 -
如果为
False
(默认值),则忽略符号链接。
-
返回值:
每次迭代返回一个三元组 (root, dirs, files):
-
root
:-
当前目录的路径(字符串)。
-
-
dirs
:-
当前目录下的子目录列表(列表类型)。
-
-
files
:-
当前目录下的文件列表(列表类型)。
-
示例:
import os
for root, dirs, files in os.walk('..'):
print(root)
print(dirs)
print(files)
print('_'*40)
2. 包(Packages)
2.1 包的定义和作用
定义
-
包是将模块以文件夹的组织形式进行分组管理的方法,以便更好地组织和管理相关模块。
-
包是一个包含一个特殊的
__init__.py
文件的目录,这个文件可以为空,但必须存在,以标识目录为Python包。 -
包可以包含子包(子目录)和模块,可以使用点表示法来导入。
作用
# 同模块的导入规则
import 包名 [as 包别名]
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名 [as 模块新名]
from 包名 import 模块名 [as 模块新名]
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 属性名 [as 属性新名]
# 导入包内的所有子包和模块
from 包名 import *
from 包名.模块名 import *
-
将一系列模块进行分类管理,有利于防止命名冲突
-
可以在需要时加载一个或部分模块而不是全部模块
-
2.2 导入包和子包
-
使用
import
关键字可以导入包和子包,以访问其中的模块和内容。