python基础之模块(time,datetime,os,random)
Posted zz洲神在此
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础之模块(time,datetime,os,random)相关的知识,希望对你有一定的参考价值。
模块
模块是什么?
我们说一个函数就是一个功能,那么把一些常用的函数放在一个py文件中,这个文件就称之为模块,模块,就是一些列常用功能的集合体。
为什么要使用模块?
开发效率高,减少重复代码
拿来主义
人们常说的脚本是什么?
脚本就是一个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秒,秒为单位
如果想将字符串时间转化为时间戳,或者时间戳变成字符串时间,必须经过结构化时间转换过去。
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_26day07")) # 判断路劲是否存在 **
print(os.path.isabs("day07")) # 如果path是绝对路径,返回True **
print(os.path.isfile("C:Python_26day15lib.py")) # 如果()中是一个存在的文件,返回True。否则返回False ***
print(os.path.isdir("C:Python_26day15")) # 如果path是一个存在的目录,则返回True。否则返回False ***
重要:
print(os.path.join("C:User",'Python_26',"day15","lib.py")) # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 ***
print(os.path.getsize("C:Python_26day15lib.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码表中的位置
以上是关于python基础之模块(time,datetime,os,random)的主要内容,如果未能解决你的问题,请参考以下文章