一.时间模块:
1.时间戳:从1970年到现在经过的秒数
用于间隔间隔的计算
print(time.time())
2.按照某种格式显示的时间:
用于展示时间
print(time.strftime('%Y-%m-%d %H:%M:%S:%p'))
print(time.strftime('%Y-%m-%d %X'))
# 2020-09-15 20:54:50:PM
# 2020-09-15 20:54:50
3.结构化的时间:
用于单独获取时间的一部分
res = time.localtime()
print(res)
# time.struct_time(tm_year=2020, tm_mon=9, tm_mday=15, tm_hour=20, tm_min=54, tm_sec=50, tm_wday=1, tm_yday=259, tm_isdst=0)
print(res.tm_year)
# 2020
import datetime
print(datetime.datetime.now())# 2020-09-15 21:09:01.489389
print(datetime.datetime.now()+datetime.timedelta(days=3)) #没有年的统计单位 用day*365
# 2020-09-18 21:13:17.171830
时间格式的转换:
结构化变时间戳:
s_time = time.localtime()
print(time.mktime(s_time))
时间戳变结构化:
s_time = time.time()
print(time.localtime(s_time)) #当地的时间
print(time.gmtime(s_time))
格式化变结构化:
s_time = time.localtime()
print(time.strptime('1992-03-03 11:11:11','%Y-%m-%d %H:%M:%S'))
# time.struct_time(tm_year=1992, tm_mon=3, tm_mday=3, tm_hour=11, tm_min=11, tm_sec=11, tm_wday=1, tm_yday=63, tm_isdst=-1)
print(time.strftime('%Y-%m-%d %H:%M:%S',s_time))
# 2020-09-16 18:59:50
需要掌握的只有一条:字符串变时间戳
# '1992-03-03 11:11:11'
struct_time = time.strptime('1992-03-03 11:11:11','%Y-%m-%d %H:%M:%S')
print(time.mktime(struct_time)+7*86400)
了解知识
import time
time.sleep(3)
print(time.strftime('%Y-%m-%d %H:%M:%S:%p'))# 等于
print(time.asctime())
import datetime
print(datetime.datetime.now())# 2020-09-16 19:19:38.108500
print(datetime.datetime.utcnow())# 2020-09-16 11:19:38.108500
print(datetime.datetime.fromtimestamp(333)) # 1970-01-01 08:05:33
二.随机数
import random
print(random.random()) # 0-1之间的随机数
print(random.randrange(1,100)) # 大于等于1小于100的整数
print(random.randint(1,100)) # 大于等于1小于等于100的整数
print(random.choice([2,'23',[4,5]])) # 2或者23或者[4,5]
print(random.sample([1,'23',[4,5],5],3)) # 任意三个元素的组合
print(random.uniform(1,3)) # 大于1小于3的小数
# item = [1,3,5,7,9]
# random.shuffle(item) #打乱顺序
# print(item)
应用:
随机验证码
import random
def makecode(size):
res = ''
for i in range(size):
ran_letter = chr(random.randint(65,90))
ran_number = str(random.randint(0,9))
res +=random.choice([ran_letter,ran_number])
return res
print(makecode(5))
打印进度条
import time
rescv_size = 0
total_size = 33333
res = ''
def progress(persent):
if persent >1:
persent = 1
res =int(50*persent)*'#'
print('\r[%-50s]%d%%' % (res,int(persent*100)) ,end='')
while rescv_size < total_size:
time.sleep(0.3)
rescv_size +=1024
persent = rescv_size / total_size
progress(persent)
三.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下为"\r\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的大小
四.shutil模块
高级的文件,文件夹,压缩包处理模块
import shutil
shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w')) # 将文件内容拷贝到另一个文件中
shutil.copyfile('f1.log', 'f2.log') #拷贝文件 目标文件无需存在
hutil.copymode('f1.log', 'f2.log') #仅拷贝权限。内容、组、用户均不变 目标文件必须存在
shutil.copystat('f1.log', 'f2.log') #仅拷贝状态的信息,包括:mode bits, atime, mtime, flags 目标文件必须存在
shutil.copy('f1.log', 'f2.log') #拷贝文件和权限
shutil.copy2('f1.log', 'f2.log') #拷贝文件和状态信息
shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
# 递归的去拷贝文件夹,目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除
shutil.rmtree('folder1') #递归的去删除文件
shutil.move('folder1', 'folder3')#递归的去移动文件,它类似mv命令,其实就是重命名
shutil.make_archive(base_name, format,...) # 创建压缩包并返回文件路径,例如:zip、tar
# base_name: 压缩包的文件名也可以是压缩包的路径。只是文件名时,保存至当前目录,否则保存至指定路径,
# 如 data_bak =>保存至当前路径
# 如:/tmp/data_bak =>保存至/tmp/
# format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
# root_dir: 要压缩的文件夹路径(默认当前目录)
# owner: 用户,默认当前用户
# group: 组,默认当前组
# logger: 用于记录日志,通常是logging.Logger对象