python基础之模块(time,datetime,os,random)

模块

模块是什么?

我们说一个函数就是一个功能,那么把一些常用的函数放在一个py文件中,这个文件就称之为模块,模块,就是一些列常用功能的集合体。

为什么要使用模块?
  1. 开发效率高,减少重复代码

  2. 拿来主义

人们常说的脚本是什么?

脚本就是一个python文件

模块的分类

1.内置模块

2.第三方模块

3.自定义模块

import

第一次导入模块执行三件事

1.创建一个以模块名命名的名称空间。

2.执行这个名称空间(即导入的模块)里面的代码。

3.通过模块名来使用模块中的功能

导入多个模块
import os,sys,json   # 这样写可以但是不推荐

推荐写法

import os
import sys
import json

多行导入:易于阅读 易于编辑 易于搜索 易于维护。

from ... import ...

import 和from 的对比:

import 全部导入

from 指定功能导入

from可以一行导入多个功能

from json import dumps,loads,load,dump
导入顺序

模块的查找顺序

内存中已经加载的模块->内置模块->sys.path路径中包含的模块

time模块

时间分类:
1.时间戳     --- 用于计算的
2.结构化时间 --- 给程序员查看使用 (命名元组)
3.字符串时间 --- 给用户查看的
t = time.time()   当前时间的时间戳
print(time.localtime(t))   # 将时间戳转成结构化时间
print(time.localtime()     # 将时间戳转成结构化时间,不写默认是当前时间戳
print(time.mktime(t))    # 将结构化时间转成时间戳
t = time.localtime()
print(time.strftime("%y-%m-%d %H:%m:%S",t))  #将结构化时间转换成字符串时间
str_time = "2019-9-1 12:23:06"
print(time.strptime(str_time,"%Y-%m-%d %H:%M:%S")) # 将字符串时间转换成结构化时间
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
str_time = "2019-9-1 12:23:06"
print(time.mktime(time.strptime(str_time,"%Y-%m-%d %H:%M:%S")))
time模块还有个常用的功能休眠
time.sleep(5)  5就是5秒,秒为单位

img

如果想将字符串时间转化为时间戳,或者时间戳变成字符串时间,必须经过结构化时间转换过去。

datetime模块

获取当前日期和时间
from datetime import datetime
print(datetime.now())
'''
结果:2019-12-04 21:07:48.734886
'''
获取指定日期和时间
from datetime import datetime

dt = datetime(2018,5,20,13,14)
print(dt)

'''
结果:2018-05-20 13:14:00
'''
str与datetime的转换

很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串:

from datetime import datetime

t = datetime.strptime('2018-4-1 00:00','%Y-%m-%d %H:%M')
print(t)
'''
结果: 2018-04-01 00:00:00
'''

# 如果已经有了datetime对象,要把它格式化为字符串显示给用户,就需要转换为str,转换方法是通过`strftime()`实现的,同样# 需要一个日期和时间的格式化字符串:

```
from datetime import datetime
now = datetime.now()
print(now.strftime('%a, %b %d %H:%M'))
Mon, May 05 16:28
```
datetime加减

对日期和时间进行加减实际上就是把datetime往后或往前计算,得到新的datetime。加减可以直接用+-运算符,不过需要导入timedelta这个类:

from datetime import datetime,timedelta
print(datetime.now() - timedelta(days=123))
print(datetime.now() + timedelta(days=500))
结果:2019-09-21 06:51:41.265362
2021-06-05 06:51:41.265362
指定datetime时间
current_time = datetime.datetime.now()
print(current_time.replace(year=1977))  # 直接调整到1977年
print(current_time.replace(month=1))  # 直接调整到1月份
print(current_time.replace(year=1989,month=4,day=25))  # 1989-04-25 18:49:05.898601

OS模块

os -- 与操作系统做交互的
import os
1.文件:
os.rename("旧名字","新名字")  # 重命名     ***
os.remove("要删除的文件名")   # 删除文件    ***

2.文件夹:
os.makedirs("a/b/c/d/e/f")      # 递归创建文件夹   ***
os.removedirs("a/b/c/d/e/f")    # 递归删除文件夹   ***
os.mkdir("a")                   # 创建文件夹       ***
os.rmdir("a")                   # 删除文件夹       ***
print(os.listdir("C:\Python26视频"))                     # 查看当前路径下所有的文件  ***

3.路径:
print(os.getcwd())   #获取当前工作路径   ***

is 系列
print(os.path.exists("C:\Python_26\day07"))   # 判断路劲是否存在  **
print(os.path.isabs("day07"))       # 如果path是绝对路径,返回True  **
print(os.path.isfile("C:\Python_26\day15\lib.py"))   # 如果()中是一个存在的文件,返回True。否则返回False  ***
print(os.path.isdir("C:\Python_26\day15"))  # 如果path是一个存在的目录,则返回True。否则返回False  ***

重要:
print(os.path.join("C:\\User",'Python_26',"day15","lib.py"))  # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 ***
print(os.path.getsize("C:\Python_26\day15\lib.py")) # 获取文件大小 ***

4.其他:
print(os.popen("dir").read())  # 给终端发送指令 **
print(os.environ)  # 获取环境变量


必会:
os.getcwd()
os.makedirs()
os.removedirs()
os.mkdir()
os.rmdir()
os.rename()
os.remove()
os.path.abspath()
os.path.dirname()
os.path.basename()
os.path.join()
os.path.isfile()
os.path.isdir()
os.path.getsize()

random 模块

import random
print(random.random())  # 0 ~ 1之间的小数
print(random.randint(1,5))  # 1- 5 之间的整数
print(random.randrange(0,10,2))  # 随机偶数

print(random.choice(lst))    # 从一个可迭代对象中获取一个随机数
print(random.choices(lst,k=5)) # 从一个可迭代对象中获取多个随机数,会出现重复元素
print(random.sample(lst,k=2))    # 从一个可迭代对象中获取多个随机数,不会出现重复元素

lst = [1, 2, 3, 3, 4, 5, 6, 7, 8]
lst.sort()
random.shuffle(lst)     # 洗牌 打乱顺序
print(lst)

使用随机数实现一个5位(字母,数字)的验证码:
random chr() ord()  ascii码表
1.先去查看ascii码表
发现 65 - 90 是大写字母,从65- 90之间随机获取一个数字通过chr方法获取数字对应的内容
发现 97 -122 是小写字母,从97 -122之间随机获取一个数字通过chr方法获取数字对应的内容
2.使用for循环执行5圈,将获取的内容累加起来,最后输出
import random
# 1X3Y3ZX
def make_code(size=7):
    res = ''
    for i in range(size):
        # 循环一次则得到一个随机字符(字母/数字)
        s = chr(random.randint(65, 90))
        num = str(random.randint(0, 9))
        # num = chr(random.randint(97, 122))
        res += random.choice([s, num])
    return res

res=make_code()
print(res)

import  random
print(ord("6"))
ord()必须是字符串形式,查询数字或者字母(字符串形式)在ascill码表中的位置
posted @ 2020-01-22 21:16  zz洲神在此  阅读(...)  评论(...编辑  收藏