一.time与datetime模块
time
(1)时间有三种格式(*****)
1.时间戳:秒数=>用于时间计算
时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
import time
start = time.time() # 从1970年到现在 经过的秒数
print(start,type(start)) # 时间戳: 1596087477.9127202 <class 'float'>
2.格式化的字符串=>用于显示给人看
按照某种格式显示
格式化的时间字符串(Format String)
res=time.strftime("%Y-%m-%d %H:%M:%S %p")
# res=time.strftime("%Y-%m-%d %X")
print(res,type(res)) # 结果为格式化的时间字符串
3.结构化的时间=>获取时间的某一部分
结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
res=time.localtime() # 当地时间
res1=time.gmtime() # 世界标准时间
print(res,type(res)) # time.struct_time(tm_year=2020, tm_mon=7, tm_mday=30, tm_hour=13, tm_min=42, tm_sec=13, tm_wday=3, tm_yday=212, tm_isdst=0) <class 'time.struct_time'>
print(res.tm_year) # 当前的年:2020
print(res)
print(res1)
(2)时间转换
计算机认识的时间只能是’时间戳’格式,而程序员可处理的或者说人类能看懂的时间有: ‘格式化的时间字符串’,‘结构化的时间’ ,于是有了下图的转换关系
2.1时间戳—>格式化的字符串
struct_time=time.localtime(3333.3)
res=time.strftime("%Y:%m",struct_time)
print(res) # 时间戳 1970:01
2.2格式化的字符串—>时间戳
# time.strptime(string[, format])
# 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作
struct_time=time.strptime("2017-07-03 11:11:11","%Y-%m-%d %X")
# mktime(t) : 将一个struct_time转化为时间戳。
res=time.mktime(struct_time)
print(res) # 1499051471.0
(3)ctime与asctime(了解)
ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:‘Sun Jun 20 23:21:05 1993’。如果没有参数,将会将time.localtime()作为参数传入。
print(time.ctime(3333.3)) # Thu Jan 1 08:55:33 1970
print(time.asctime(time.localtime(3333.3))) # Thu Jan 1 08:55:33 1970
(4)sleep:线程推迟指定的时间运行,单位为秒
# time.sleep(3)
datetime
时间加减
import datetime
res=datetime.datetime.now()
print(res) # 2020-07-30 14:09:12.885016
# 时间戳转成日期格式
print(datetime.date.fromtimestamp(time.time())) # 2020-07-30
print(datetime.datetime.fromtimestamp(time.time())) # 2020-07-30 14:10:42.398683
# 返回当前时间加3天
res=datetime.datetime.now()+datetime.timedelta(days=3)
print(res) # 2020-08-02 14:33:42.123524
# 返回当前时间减3天
res1=datetime.datetime.now()+datetime.timedelta(days=-3)
print(res1) # 2020-07-27 14:33:42.123524
res=datetime.datetime.now()
print(res) # 2020-07-30 14:36:01.231141
new_res=res.replace(year=1999,month=9)
print(new_res) # 1999-09-30 14:36:01.231141
二.random模块
import random
print(random.random()) #(0,1)----float 大于0且小于1之间的小数
print(random.randint(1,3)) #[1,3] 大于等于1且小于等于3之间的整数
print(random.randrange(1,3)) #[1,3) 大于等于1且小于3之间的整数
print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]
print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合
print(random.uniform(1,3))#大于1小于3的小数,如1.927109612082716
item=[1,3,5,7,9]
random.shuffle(item) #打乱item的顺序,相当于"洗牌"
print(item)
随机验证码
def make_code(n=5):
res = ''
for i in range(n):
s1 = str(random.randint(0, 9))
s2 = chr(random.randint(65, 90))
res += random.choice([s1, s2])
return res
print(make_code(4))
三.os模块
os模块是与操作系统交互的一个接口
常见命令
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.environ 获取系统环境变量
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
常用操作
import os
# 列出当前目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
print(os.listdir(".")) # ['.idea', 'aaa', 'bbb', 'src.py']
print(__file__) # E:/A作业/测试/src.py
# 返回path规范化的绝对路径
print(os.path.abspath(__file__)) # E:\A作业\测试\src.py
# res=os.path.split("D:/python全栈15期/day21/03 os模块.py")
# print(res)
# print(os.path.basename("D:/python全栈15期/day21/03 os模块.py"))
# print(os.path.dirname("D:/python全栈15期/day21/03 os模块.py"))
# print(os.path.exists("D:/python全栈15期/day21/"))
# print(os.path.isabs("D:/python全栈15期/day21/"))
# print(os.path.isabs("/python全栈15期/day21/"))
# print(os.path.isabs("python全栈15期/day21/"))
# print(os.path.join("a",'b','D:\c','d.txt'))
print(os.path.getsize(__file__))
os路径处理的2种方式
# 方式一print(os.path.dirname(os.path.dirname(__file__)))
# 方式二
# res=os.path.join(
# __file__,
# "..",
# ".."
# )
# print(os.path.normpath(res))
模拟cmd程序
cmd=input(r"""
Microsoft Windows [版本 10.0.18363.959]
(c) 2019 Microsoft Corporation。保留所有权利。
%s=====> """ %os.getcwd())
res=os.system(cmd)
print('='*100)
print(res)
输出结果
cmd程序显示结果
四.subprocess模块
import subprocess
# pwd ; safgfghgh ; echo 123
# subprocess相当于管道,有2个口,可以暂时存放内容
obj=subprocess.Popen("diaskdk",shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
res1=obj.stdout.read()
res2=obj.stderr.read()
# print(res1.decode('gbk'))
print(res2.decode('gbk')) # 'diaskdk' 不是内部或外部命令,也不是可运行的程序或批处理文件。
五.sys模块:与解释器交互的模块
常见操作
# sys.argv 命令行参数List,第一个元素是程序本身路径
# sys.exit(n) 退出程序,正常退出时exit(0)
# sys.version 获取Python解释程序的版本信息
# sys.maxint 最大的Int值
# sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
# sys.platform 返回操作系统平台名称
import sys
# sys.path
# 命令行参数List,第一个元素是程序本身路径
print(sys.argv) # ['E:/A作业/测试/src.py']
原来拷贝文件的方式
src_file = input("源文件路径:").strip()
dst_file = input("目标文件路径:").strip()
with open(r"%s" %src_file,mode='rb') as f1,open(r"%s" %dst_file,mode='wb') as f2:
for line in f1:
f2.write(line)
现在拷贝文件可以使用这种方式
src_file = sys.argv[1]
dst_file = sys.argv[2]
with open(r"%s" %src_file,mode='rb') as f1,open(r"%s" %dst_file,mode='wb') as f2:
for line in f1:
f2.write(line)
# 打开windows powershell
# 格式:python3 E:\A作业\测试\src.py E:\A作业\db.txt 原文件路径 新文件路径
# python3 E:\A作业\测试\src.py E:\A作业\db.txt E:\A作业\aaa.txt #拷贝成功
# 执行文件以及拷贝文件的路径都需要输入绝对路径
打印进度条
import time
def progress(percent):
if percent > 1:
percent=1
print("\r[%-50s] %d%%" % ("#"*int(50*percent),int(100 * percent)),end='')
total_size = 1025
recv_size = 0
while recv_size < total_size:
# 每次下载1024
time.sleep(0.3)
recv_size+=1024
percent = recv_size / total_size
progress(percent)