python基础:模块(random模块、time模块、OS模块)

模块

概念

一个包含python代码的文件就是一个模块。

作用

  • 现在程序开发文件比较大,都放在一个文件中维护不方便,拆分成多个文件方便维护与管理
  • .模块可以增加代码的重用率

创建模块
模块本身就是一个文件,所有py代码都可以在文件中直接书写。不过我们开发共用模块时,最好在模块中书写以下内容。

变量         模块中的属性值
函数         单独的功能
类           相似功能组合
模块测试代码   临时使用,被导入时不会执行

注意:
1.模块名称遵循标识符。
2.模块只有第一次被导入的时候执行,多次导入不会执行。

例:one_model.py是一个简单的模块,这个模块的功能就是打招呼。

在这里插入图片描述
模块导入的原理

  1. 模块导入会将要导入的文件执行一遍
  2. 导入模块的名称就是我们定义的脚本或包的名称
  3. 我们导入模块的过程总结就是:在指定的范围内搜索指定名称的python脚本或者包,将其运行
    python基础:模块(random模块、time模块、OS模块)_第1张图片

模块的导入方式

模块导入的方式有以下多种

  1. import 模块名
  2. import 模块名 as 别名
  3. import 模块名1,模块名2,… 一行导入多个模块。
  4. from … import …
  5. from … import … as 别名
  6. from … import 功能1,功能2,…
  7. from … import * 导入所有

import 模块名
作用:直接导入模块
python基础:模块(random模块、time模块、OS模块)_第2张图片
import 模块 as 别名
如果模块的名称太长,我们可以这个模块起一个别名。
python基础:模块(random模块、time模块、OS模块)_第3张图片
import sys,os,time
import sys,os,time

python基础:模块(random模块、time模块、OS模块)_第4张图片
from … import …局部导入方式
当使用模块中的部分功能的时候,就可以使用局部导入方式。
from 模块 import 某个函数或者类。
作用:直接导入模块中的某个函数或者某个类或变量

在这里插入图片描述

注意:如果当前文件中的变量或者函数名称和模块中的名称重复,会使用就近原则。

python基础:模块(random模块、time模块、OS模块)_第5张图片
支持导入多行
from my_module import read1,read2,money
python基础:模块(random模块、time模块、OS模块)_第6张图片
from … import … as 别名
当导入的模块和当前模块中的名称相同的时候可以起别名进行区分。
from my_module import read1 as read
python基础:模块(random模块、time模块、OS模块)_第7张图片
**from 模块 import ***
from my_module import * 把my_module中所有的不是以下划线(_)开头的名字都导入到当前位置,大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差。

作用:直接导入模块中的所有方法和类和变量
python基础:模块(random模块、time模块、OS模块)_第8张图片
注意:如果my_module.py中的名字前加_,即_money,则from my_module import *,则_money不能被导入
python基础:模块(random模块、time模块、OS模块)_第9张图片
python基础:模块(random模块、time模块、OS模块)_第10张图片
all 属性
all = [变量1,变量2 …] 设置导入模块的功能。

all=[‘money’,‘read1’]
#这样在另外一个文件中用from my_module import *就这能导入列表中规定的两个名字

python基础:模块(random模块、time模块、OS模块)_第11张图片
python基础:模块(random模块、time模块、OS模块)_第12张图片
模块搜索路径

python查找模块的路径时,我们先来了解一下python中有些什么样的模块。在python中,模块主要有:

  • 内建模块(built-in):在安装python解析器时就自动安装,不以文件形式存在
  • 系统标准模块:安装python时自动安装,默认放在 /Lib/目录下
  • 第三方模块:可以使用pip命令进行安装和管理,默认放在/Lib/site-packages/目 录下
  • 自定义模块:自己写的模块,可以放在当前目录,也可以放在任意其它位置

路径搜索优先级:

内建模块>自定义模块>系统标准模块>第三方模块

  1. 内建模块
    内建模块就是系统内置的模块,在引入模块时最优先被使用,比如:sys、 math、time等模块。
    python基础:模块(random模块、time模块、OS模块)_第13张图片
  2. 自定义模块
    系统标准模块 datetime.py
    python基础:模块(random模块、time模块、OS模块)_第14张图片
    自定义模块 datetime.py
    python基础:模块(random模块、time模块、OS模块)_第15张图片
    提示:
    除了系统内建模块以外,其它所有模块都是以文件形式存在,优先级由 sys.path 列表的先后位置确定。
    自定义模块可以写在当前文件夹下,而当前文件夹是sys.path 的第一个值,所以优先级较高,仅次于内建模块

python基础:模块(random模块、time模块、OS模块)_第16张图片

pyc临时文件
为了提高加载模块的速度,python解释器会在__pycache__目录中下缓存每个模块编译后的版本,之后,再次被导入时,实际上导入的是这个.pyc的临时文件。
python基础:模块(random模块、time模块、OS模块)_第17张图片
把模块当做脚本运行
我们可以通过模块的全局变量__name__来查看模块名:
当做脚本运行:
name 的值 等于’main
当做模块导入:
__name__的值等于模块名
作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if name == ‘main’:
pass
python基础:模块(random模块、time模块、OS模块)_第18张图片
python基础:模块(random模块、time模块、OS模块)_第19张图片

常用模块

(一) random模块

产生随机数
(1)随机小数
1.random()
- 产生大于0且小于1之间的小数
在这里插入图片描述
2.uniform(a,b)

  • 产生指定范围内的随机小数

在这里插入图片描述
在这里插入图片描述

2. 随机整数

  1. randint(a,b)
    -产生a,b范围内的整数,包含开头和结尾

在这里插入图片描述

  1. randrange(start,stop,[step])
    - 产生start,stop范围内的整数,包含开头不包含结尾。
  • step 指定产生随机数的步长。
    在这里插入图片描述
  1. 随机选择一个数据
    1.random.choice(lst)
  • 随机返回序列中的一个数据
    在这里插入图片描述
  1. 打乱
    1.shuffle()
    - 打乱列表顺序
    在这里插入图片描述
    练习1:产生验证码
def v_code():
    code = ''
    for i in range(4):
        num = random.randint(0, 9)  # 生成数字
        alf = chr(random.randint(65, 90))  # 生成字母
        # 字母和数字选择一个
        add = random.choice([num, alf])
        # 拼接
        code = "".join([code, str(add)])

    return code

code = v_code()
print(code)

练习2:数字炸弹

import random, time

bomb = random.randint(0, 99)
start = 0
end = 99
# 1,2,3,4,5,6,7,8,9,10
while True:
    people = int(input('请输入{}到{}之间的数字'.format(start, end)))
    if people > bomb:
        print('man-->>大了...')
        end = people - 1
    elif people < bomb:
        print('man--->小了...')
        start = people + 1
    else:
        print('BOMING!!!')
        break

    print('等待电脑输入{}到{}之间的数字'.format(start, end))
    time.sleep(2)
    computer = random.randint(start, end)
    print('电脑输入了{}'.format(computer))
    if computer > bomb:
        print('computer-->>大了...')
        end = computer - 1
    elif computer < bomb:
        print('computer--->小了...')
        start = computer + 1
    else:
        print('bommmmmm!!!')
        break

print('数字炸弹-->', bomb)

(二)time模块

在python中,通常有这三种方式来表示时间:
时间戳、时间元组(struct_time)、格式化的时间字符串。
时间戳(timestamp) :
时间戳表示的是从1970年1月1日00:00:00开始到现在的秒值。返回的是float类型。
格式化的时间字符串(Format String): ‘1999-12-06’
时间元组(struct_time) :
struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一周的第几日,一年中第几天,夏令时。

小结:
时间戳是计算机能够识别的时间;
时间字符串是人能够看懂的时间;
时间元组则是用来操作时间的;

时间元组属性:
python基础:模块(random模块、time模块、OS模块)_第20张图片

格式化的时间字符串(Format String)表示方式: ‘1999-1-06’

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

python基础:模块(random模块、time模块、OS模块)_第21张图片
1. time.sleep()
睡眠功能,让程序等待多少s后再执行。

在这里插入图片描述

2. 时间戳
time.time()
时间戳表示的是从1970年1月1日00:00:00开始到现在的秒值。返回的是float类型。
在这里插入图片描述
3. 时间元组
time.localtime()
在这里插入图片描述
4. 时间字符串格式化

time.strftime(’%Y-%m-%d %H:%M:%S’)
python基础:模块(random模块、time模块、OS模块)_第22张图片

时间戳和时间元组之间的转换

1. 时间戳转换为时间元组

time.gmtime() 和 time.localtime()

time.gmtime() 返回的是UTC时间与北京时间少8小时。
UTC 协调世界时,又称世界统一时间,世界标准时间,国际协调时间,简称UTC。
在这里插入图片描述
Time.localtime() 当地时间
在这里插入图片描述

2. 时间元组转换为时间戳
Time.mktime()
python基础:模块(random模块、time模块、OS模块)_第23张图片

时间元组和格式化字符串之间的转换

1. 时间元组转换为字符串

time.strftime(“格式定义”,“结构化时间”) 结构化时间参数若不传,则显示当前时间

在这里插入图片描述
2. 字符串转换为时间元组

time.strptime(时间字符串,字符串对应格式)

在这里插入图片描述
时间元组 --> %a %b %d %H:%M:%S %Y时间串
time.ctime(时间戳) 如果不传参数,直接返回当前时间的格式化串

在这里插入图片描述
练习题:计算从出生到现在过了多少秒

# true_time = time.mktime(time.strptime('2019-09-11 08:30:00', '%Y-%m-%d %H:%M:%S'))
# time_now = time.mktime(time.strptime('2017-09-12 11:30:00', '%Y-%m-%d %H:%M:%S'))
# dif_time = time_now - true_time
# print(dif_time)

(三)os模块

使用os模块对文件进行一些相关操作
1. 重命名文件
在这里插入图片描述

在这里插入图片描述

2. 删除文件
在这里插入图片描述

在这里插入图片描述

3. 创建目录

创建目录 mkdir()

在这里插入图片描述

4. 创建多级目录
在这里插入图片描述5. 删除目录
在这里插入图片描述

删除一层空目录。
在这里插入图片描述

6. 删除多级目录
在这里插入图片描述
若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推。
如果上一层目录不为空则停止删除文件。如果file04不为空则报错。

**7. 获取当前所在目录 **

在这里插入图片描述

在这里插入图片描述

8. 获取目录列表

在这里插入图片描述

在这里插入图片描述

9. 切换所在目录 chdir()
在这里插入图片描述

改变当前脚本工作目录
在这里插入图片描述

10. 判断文件或文件夹是否存在
os.path.exits(path)
在这里插入图片描述

11. 判断是否为文件
在这里插入图片描述12.判断是否为目录
在这里插入图片描述
13. 获取绝对路径
在这里插入图片描述
14. 判断是否为绝对路径
在这里插入图片描述

你可能感兴趣的:(python)