模块与包

模块

模块介绍

在Python中,一个py文件就是一个模块。模块名则是这个py文件的文件名。

模块的优点
  • 提高开发效率。
模块的来源
  • 内置的:python解释器自带的,直接拿来使用的
  • 第三方的:别人写的,如果想用,就要先下载在使用 pip install 包名
  • 自定义的:我们自己写的

模块的分类

1、使用纯Python代码编写的py文件

2、包含一系列模块的包

3、使用C编写并链接到Python解释器中的内置模块

4、使用C或C++编译的扩展模块

模块的搜索路径

1、如果该模块已加载到内存中,则直接引用

2、从左到右的顺序依次检索 sys.path 中定义的路径

import模块

  • import 直接导入,但不能将里面的参数导出来。
import py文件名/模块名
  • 用import语句导入多个模块
import app1
import app2
    ...
import appN
import app1,app2,...,appN
  • 详细导入 from ... import ... 语句
from 模块位置 import 模块名
  • 导入所有 from ... import * 语句
from model import *  
  • 模块重命名 from ... import ... as ... 语句
from 模块位置 import 模块名 as 自定义名字

os模块

import os
获取当前文件路径
  • abspath
path = os.path.abspath(__file__)
print(path)
# F:\python项目\untitled\模块\1.py
获取当前文件所在文件夹的路径
  • dirname 可以套多个返回上级
path = os.path.dirname(__file__)
print(path)  # F:/python项目/untitled/模块
path1 = os.path.dirname(path)
print(path1)  # F:/python项目/untitled  
  • getcwd
print(os.getcwd())
# F:\python项目\untitled\模块
判断当前路径是否存在
  • exists
file_path = r'E:\Python'
print(os.path.exists(file_path))
# False
拼接路径
  • join 可以拼多个
path = os.path.abspath(__file__)
print(os.path.join(path,'a.py'))
# F:\python项目\untitled\a.py
print(os.path.join(path,'5','a.py'))
# F:\python项目\untitled\5\a.py
切割路径
  • split
path = os.path.abspath(__file__)
print(os.path.split(path))
# ('F:\\python项目\\untitled', '1.py')
当前路径是否是文件
  • isfile
path1 = os.path.abspath(__file__)
print(os.path.isfile(path1))
# True

path2 = os.path.dirname(__file__)
print(os.path.isfile(path2))
# False
当前路径是否为绝对路径
  • isabs
file_path1 = r'D:\Python\app.py'
file_path2 = r'../app.py'

print(os.path.isabs(file_path1))
# True

print(os.path.isabs(file_path2))
# False
获取当前文件或目录的最后访问时间
  • getatime
import os, time

path = os.path.dirname(__file__)
file_path = os.path.abspath(__file__)

a = os.path.getatime(path)
print(a)  # 1702543613.531708
print(time.strftime("%Y-%m-%d  %H-%M-%S", time.localtime(a)))
# 2023-12-14  16-46-53

b = os.path.getatime(file_path)
print(time.strftime("%Y-%m-%d  %H-%M-%S", time.localtime(b)))
# 2023-12-14  16-46-53
获取当前文件或者目录的创建时间
  • getctime
import os, time

path = os.path.dirname(__file__)
file_path = os.path.abspath(__file__)
a=os.path.getctime(path)
print(a)  # 1702256106.10977
print(time.strftime("%Y-%m-%d  %H-%M-%S", time.localtime(a)))
# 2023-12-11  08-55-06

b = os.path.getctime(file_path)
print(time.strftime("%Y-%m-%d  %H-%M-%S", time.localtime(b)))
# 2023-12-11  19-09-21
更多函数
函数 作用
mkdir 创建单级文件夹(只能创建单级文件目录,多级就会报错)
makedirs 创建多级文件夹
rmdir 删除单级文件夹(若目录不为空则无法删除,报错)
removedirs 删除多级文件夹(若目录不为空则无法删除,报错)
listdir 列出当前文件夹下的所有文件及文件夹
remove 删除指定文件
rename 重命名文件夹/文件
stat 获取文件夹/文件详细信息
chdir 改变当前工作目录

random模块

import random
随机小数
  • 默认区间的小数(random) 大于0且小于1之间的小数
res = random.random()
print(res)
# 0.16954696713473794
  • 指定区间的小数(uniform)
# 指定为 0 到 5 之间的随机小数
res = random.uniform(1, 5)
print(res)
# 1.349527002017219
随机整数
  • 随机区间整数(randint) 大于等于1且小于等于5之间的整数
# 大于等于1且小于等于5之间的整数
res = random.randint(1, 5)
print(res)
# 5
  • 随机区间奇偶数(randrange) 大于等于1且小于10之间的奇数
import random

# 随机区间奇数 (开始,结束,步长)
res_one = random.randrange(1, 10, 2)
print(res_one)
# 5
随机选择返回
  • 随机返回一个(choice) 随机选择一个返回
choice = ["tom", 'cad', 'zhans']
res = random.choice(choice)
print(res)
# cad
  • 随机指定个数(sample) 指定待选择项和返回的个数
choice = ["tom", 'cad', 'zhans']
# 待选择项,返回的个数  但不能超过指定对象的数量
res = random.sample(choice,2)
print(res)
# ['zhans', 'tom']
打乱列表顺序
  • shuffle
item = [1, 3, 5, 7]
random.shuffle(item)
print(item)
# [3, 5, 1, 7]

random.shuffle(item)
print(item)
# [1, 3, 7, 5]
登录验证----四位验证码
import random

def get_codes():
    code=''
    for i in range(4):
        a=random.randint(0,9)
        b=chr(random.randint(97,122))
        c=chr(random.randint(65,90))
        res = random.choice([a,b,c])
        code=code+str(res)
    # 生成随机四位验证码
    return code

def login():
    code=get_codes()
    print(code)
    aa=input('输入验证码:').strip()
    if aa!=code:
        return False,'错误'
    else:
        return True,'验证正确'

print(login())
# 3L19
# 输入验证码:3L19
# (True, '验证正确')

json模块

import json
反序列化(dumps)
  • 将Python对象转换为json字符串
  • json转换完的字符串类型的字典中的字符串是由 ""表示的
obj = {'name':'tom'}
json_obj = json.dumps(obj)
print(json_obj, type(json_obj))
# {"name": "tom"} <class 'str'>
序列化方法(loads)
  • 将json字符串转换为Python对象
json_str = json.dumps(json_obj)
print(json_str, type(json_str))
# "{\"name\": \"tom\"}" <class 'str'>
不指定参数
  • 接收一个文件句柄
  • 直接将字典转换成 json字符串写入文件
obj = {'name':'tom'}     
with open("data1.json", "w") as f:
    json.dump(obj,f)
obj = {'name':'张三'}   
with open("data2.json", "w") as f:
    json.dump(obj,f)  

data1.json

{"name": "tom"}

data2.json 带中文

{"name": "\u5f20\u4e09"}
指定参数编码(ensure_ascii)
obj = {'name':'张三'}
with open("data.json", "w",encoding='utf-8') as f:
    json.dump(obj,f,ensure_ascii=False)
    # ensure_ascii=False 上面指定编码格式后需要将 默认使用 ascii 这个选项设置为否

data.json

obj = {'name':'张三'}
指定参数分隔符(separators)
obj = {'name':'张三','age': 22}
with open("data.json", "w",encoding='utf-8') as f:
    json.dump(obj, f,ensure_ascii=False, separators=(',', '*'))

data.json

{"name"*"张三","age"*22}
读文件数据(load)
  • 直接将文件中的 json转换成数据结构返回
with open("data.json", "r",encoding='utf-8') as f:
    python_obj = json.load(f)
    print(python_obj, type(python_obj))
# {'name': '张三', 'age': 22} <class 'dict'>

hashlib模块

import hashlib

摘要算法 : 摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。摘要算法加密的特点是:相同的数据加密出来的加密串是一样的。

a='you i as dog'.encode('utf-8')
md5=hashlib.md5(a)
# 十六进制
print(md5.hexdigest()) #089cd9b11feb94aa59c8adf2f6c7edc6
# 二进制
print(md5.digest())   # b'\x08\x9c\xd9\xb1\x1f\xeb\x94\xaaY\xc8\xad\xf2\xf6\xc7\xed\xc6'

密码加密

data={}

def save_data(path,data,mode='a',encoding='utf-8'):
    with open(path,mode=mode,encoding=encoding) as f:
        json.dump(data,f)

def encry_password(data):
    md5 = hashlib.md5(data.encode('utf-8'))
    return md5.hexdigest()

def register():
    username=input('用户名:').strip()
    password = input('密码:').strip()
    password=encry_password(password)
    data[username]={
        'username':username,
        'password':password,
    }
    save_data(path='data.json',data=data)

register()

data.json

{"qcc": {"username": "qcc", "password": "202cb962ac59075b964b07152d234b70"}}

什么是包

  • 在Python中,包是模块的集合体。包内部必须包含一个特殊的 __init__.py 文件,它可以为空文件或包含初始化代码。
posted @ 2023-12-20 18:51  蓝幻ﹺ  阅读(36)  评论(0)    收藏  举报