模块:time与datetime,random,os,subprocess,sys

一.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)

猜你喜欢

转载自blog.csdn.net/yikenaoguazi/article/details/107688390