python的包和模块day11

Python包和模块

当使用Python编程时,包(Packages)和模块(Modules)是两个关键的概念,它们有助于组织、管理和复用代码。

1. 模块(Modules)

1.1 什么是模块

一个.py 文件就是一个模块

模块是含有一系列数据函数等的程序

  • 作用

    把相关功能的函数等放在一起有利于管理,有利于多人合作开发

  • 模块的分类

    1. 内置模块(在python3 程序内部,可以直接使用)

    2. 标准库模块(在python3 安装完后就可以使用的 )

    3. 第三方模块(需要下载安装后才能使用)

    4. 自定义模块(用户自己编写)

    模块名如果要给别的程序导入,则模块名必须是 标识符

## 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 导入模块

  • 语法

  1. import 模块名  [as 模块新名字1]

    导入一个模块到当前程序

  2. from 模块名 import 模块属性名 [as 属性新名]

    导入一个模块内部的部分属性到当前程序

  3. 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__ 属性

    1. 当一个模块是最先运行的模块,则这个模块是主模块, 主模块的__name__ 属性绑定'__main__' 字符串

    2. 如果一个模块是用 三种 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 模块

https://docs.python.org/zh-cn/3/library/time.html

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 --- 基本日期和时间类型 — Python 3.13.2 文档

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):
    # 处理逻辑

参数说明:

  1. top:

    • 要遍历的根目录路径(字符串类型)。

  2. topdown (可选):

    • 如果为 True(默认值),则从根目录开始遍历(自上而下)。

    • 如果为 False,则从最深层子目录开始遍历(自下而上)。

  3. onerror (可选):

    • 一个回调函数,用于处理遍历过程中发生的错误。

  4. followlinks (可选):

    • 如果为 True,则会遍历符号链接指向的目录。

    • 如果为 False(默认值),则忽略符号链接。

返回值:

每次迭代返回一个三元组 (root, dirs, files):

  1. root:

    • 当前目录的路径(字符串)。

  2. dirs:

    • 当前目录下的子目录列表(列表类型)。

  3. 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关键字可以导入包和子包,以访问其中的模块和内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值