文章目录
前言
包和模块的主要作用是组织和管理代码,使得代码更加模块化和可重用。通过使用包和模块,可以将代码分解成更小的部分,提高代码的可读性和维护性。
一.包和模块概念
在Python中,包(package)是一种组织Python模块的方法。包是一个目录,目录中包含一个特殊的文件__init__.py
,该文件将目录标识为一个包。一个包可以包含多个模块和子包。
模块(module)是一个Python文件,包含可执行的代码。模块可以定义函数、类和变量,可以被其他模块调用和使用。
常见导入包的方式:
在Python中,使用import
语句导入包或模块,然后使用包或模块中定义的函数、类和变量。
例如,如果有一个名为math
的包,其中包含一个名为add
的模块,可以使用以下代码导入并调用其中的函数:
方法一:
import math.add
result = math.add.sum(1, 2)
print(result)
方法二:
from math import math
方法三:从包中导入所有模块
from math import *
二._name_属性
当一个模块直接被运行时(而不是被导入到其他模块中),__name__
属性的值会被自动设置为__main__
。这样可以用来判断一个模块是被直接运行还是被导入到其他模块运行中。
例如,假设有一个名为module.py
的模块,其中包含以下代码:
module包含的代码如下
def my_func():
函数代码
if __name__ == "__main__":
print("这个模块被直接运行")
else:
print("这个模块被导入其它模块中")
如果直接运行module.py
,则输出为:"这个模块被直接运行",因为__name__
属性的值此时是__main__
。如果将module.py
导入到另一个模块中运行,则输出为:"这个模块被导入其它模块中",因为__name__
属性的值此时是module
。
三.模块
UUID模块
uuid:模块用于生成唯一的标识符。
数学模块
math:提供了一系列用于执行数值计算和数学运算的函数。如下所示
数学常数
import math
自然常数 e
print(math.e) 输出:2.718281828459045
自然常数 Π
print(math.pi) 输出:3.141592653589793
数值运算
import math
开平方
print(math.sqrt(16)) 输出:4.0
绝对值
print(math.fabs(-16)) 输出:16.0
求余数
print(math.fmod(10,3)) 输出:1.0
求幂次方
print(math.pow(10,3)) 输出:1000.0
向上取整
print(math.ceil(10.0001)) 输出:11、0
向下取整
print(math.floor(10.0001)) 输出:10、0
四舍五入
print(round(10.0001)) 输出:10、0 整数部分为偶数.5会被舍去
传入的变量是数字返回假.反之true
print(math.isnan(10.6)) 输出:false
传入数字是无限值返回true 反之返回false
print(math.isfinite(math.pi)) 输出:true
随机数模块
random:,用于生成随机数,用于生成随机整数、随机浮点数、随机选择等。
import random
返回一个[a,b]之间的随机整数
print(random.randint(0,100))
产生(0,1)之间的随机数
print(random.random())
随机返回非空序列中的一个元素
print(random.choice([1,2,3,4]))
以指定步长随机返回非空序列中的元素
print(random.randrange(0,100,5))
操作系统模块
os:提供了很多函数来进行文件和目录的管理、进程管理、环境变量的获取等操作。
获取当前文件路径
print(os.getcwd())
切换当前工作路径 相当于 cd命令
print(os.chdir("/"))
获取当前文件的相绝对路径,相当于pwd命令
print(os.path.abspath(os.curdir))
修改文件或目录权限
os.chmod('file.txt', 0o444) 更改文件权限为只读,参考Linux,0o代表采用八进制
返回当前设备对应线程数
print(os.cpu_count())
获取当前脚本的进程号
print(os.getpid())
获取父进程的进程号
print(os.getppid())
关闭进程
os.kill(111,13) 11:需要关闭的进程号 13:关闭程序的进程号
列出指定文件夹中的内容
print(os.listdir(文件夹路径))
创建目录 参考makdir 可用相对/绝对路径创建
print(os.makedirs("a/b/c"))
输出目录路径分隔符 Linux->"/" windos-->"\"
print(f"a{os.sep}b{os.sep}c") 输出:a\b\c
删除文件
os.remove(相对/绝对路径)
从最后路径中最后一个目录开始删除非空目录,无法删除非空目录
os.removedirs("a/b/c")
删除整个目录包括文件
import shutil
shutil.rmtree("a")
执行终端命令,该命令可以调用windows或Linux系统命令
os.system("ls")
文件路径模块
os.path:
模块提供了一些函数用于处理文件路径和文件名。
from os.path import *
s = "/Users/123/text.txt"
获取指定路径下的文件名
print(basename(s)) 输出:text.txt
获取指定文件的路径信息
print(dirname(s)) 输出:/Users/123
判断文件是否存在
print(exists(s)) 输出:False
获取文件大小
print(getsize("a/b/zt.txt"))
判断路径是不是目录
isdir()
判断路径是不是文件
isfile()
判断传入的路径是不是软链接
islink()
判断是不是挂载文件
ismount
拼接路径
d = "/Users/music"
f = "123.txt"
path = join(d, f) 输出:/Users/music/123.txt
print(split(path)) 输出:('/Users/music', '123.txt')
遍历指定路径下的目录和子目录
os.walk(top, topdown=True)
top:要遍历的目录路径。
topdown:True,先遍历top目录,然后遍历其子目录;False,先遍历子目录,再遍历top目录。
返回值:返回一个生成器对象,每次迭代返回一个三元组(dirpath, dirnames, filenames),其中:
dirpath:字符串,当前遍历到的目录的路径。
dirnames:列表,当前目录下的子目录列表。
filenames:列表,当前目录下的文件列表
演示案例:在Linux中读取指定路径下目录以及子目录
import os
def read_files_in_directory(directory):
# 遍历指定目录
for root, dirs, files in os.walk(directory):
for file in files:
# 构造文件的完整路径
file_path = os.path.join(root, file)
print(f"文件路径: {file_path}")
# 尝试读取文件内容
try:
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read(100) # 读取前100个字符
print(f"文件内容(前100个字符): {content}")
except Exception as e:
print(f"无法读取文件 {file_path}: {e}")
# 调用函数,传入/data目录
read_files_in_directory('/data')
python系统模块
sys模块是Python的一个内置模块,它提供了对Python解释器的访问和控制。
from sys import *
显示api版本
print(api_version)
#输出cpython版本信息
print(copyright)
显示python版本信息
print(version)
将运行脚本用到的参数保存到列表中
print(argv)
获取python默认编码
print(getdefaultencoding())
获取文件系统默认编码
print(getfilesystemencoding())
时间模块
time:time模块是Python标准库中的一个模块,它提供了一些与时间相关的功能。
import time
将运行到此行代码的时间点返回
print(time.time())
获取本地时间
print(localtime())
将时间对象转化为指定格式的字符串
print(time.strftime("%Y-%m-%d %H:%M:%S", localtime())) 输出:2024-09-05 15:08:47
将时间字符串转化为指localtime
print(strptime("2024-09-05 15:08:47","%Y-%m-%d %H:%M:%S"))
延迟函数
sleep(秒)
演示案例:数字时钟代码
from time import *
while True:
time = strftime("%Y-%m-%d %H:%M:%S", localtime())
print("\r"+time,end="")
sleep(1)
演示案例:定时代码,到了下班时间主动提醒
from time import *
def time_check():
while True:
now_time = localtime()
current_hour, current_minute = now_time.tm_hour , now_time.tm_min
if current_hour == 16 and current_minute == 27:
print("下班时间到了")
break
else:
time = strftime("%Y-%m-%d %H:%M:%S",now_time)
print("\r" + time, end="")
sleep(1)
time_check()
哈希_加密模块
哈希模块:提供了的哈希算法可以将任意长度的数据转换为固定长度的数据。
from hashlib import *
pwd = "123456"
生成给定数据的md5值-->哈希函数参数必须是字节数据,需要使用encode转换
md5(pwd.encode())
生成给定数据的 MD5 哈希值的十六进制字符串
md5.hexdigest()
对称加密模块
hmac模块:一种基于哈希函数和密钥的消息认证码。通过使用HMAC算法,可以确保消息的完整性和身份验证。
new()函数的语法如下: hmac.new(key, data=None, digestmod=None)
from hmac import *
md5 = new(b"1",b"1","md5")
md5.update(b"234")
print(md5.hexdigest())