一.time与datetime模块
在python中,通常有这几种方式来表示时间:
#时间戳:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行"type(time.time())",返回的是 float类型
#格式化的时间字符串(Format String)
#结构化的时间(struct_time):struct_time元组共有9个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
# 三种形式的时间
import time
print(time.time()) #时间戳:1539673690.3508024
print(time.strftime("%Y-%m-%d %X")) #格式化时间字符串 2018-10-16 15:08:47
print(time.localtime()) #本地时区的struct_time
print(time.gmtime()) #UTC时区的struct_time
格式化字符串时间,结构化时间,时间戳 三者的转换关系如图
#localtime([secs]) #将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准
print(time.localtime(time.time())) #将时间戳转换成当前时区的结构化时间
# gmtime([secs]) #将一个时间戳转换为0时区的struct_time。secs参数未提供,则以当前时间为准
print(time.gmtime(time.time()))
# mktime(t) : 将一个struct_time转化为时间戳。
print(time.mktime(time.localtime()))
#strftime(format[,t]):把一个代表时间的元组或者struct_time(如local_time()和gmtime()返回)转化为格式化的时间字符串,如果t未指定,将传入local_time(),如果元组中任何一个越界,ValueError的错误将会被抛出
print(time.strftime("%Y-%m-%d %X",time.localtime()))
#strptime(string[,format]):把一个格式化时间字符串转换成struct_time,实际上和strftime()是逆操作
print(time.strptime("2018-10-16 15:26:48","%Y-%m-%d %X"))
#time.struct_time(tm_year=2018,tm_mon=10,tm_mday=16,tm_hour=15,tm_min=34,tm_sec=23,tm_wday=3,tm_yday=125,tm_isdst=-1)
#在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"
#asctime([t]) 把一个表示时间的元组或者struct_time表示为这种形式:Tue Oct 16 15:42:47 2018
#如果没有参数,将会将time.localtime()作为参数传入
print(time.asctime())
#ctime([secs]) 把一个时间戳转化为time.asctime()的形式,如果参数未给或者为None的时候,将会默认time.time()为参数
print(time.ctime()) #Tue Oct 16 15:46:37 2018
time.sleep(5) # 线程推迟指定的时间运行,单位为秒
datetime模块
import datetime
print(datetime.datetime.now()) #2018-10-16 15:51:32.311613
print(datetime.date.fromtimestamp(time.time())) #时间戳直接转成日期格式:2018-10-16
print(datetime.datetime.now()+datetime.timedelta(3)) #2018-10-19 15:54:35.742864 当前时间+3天
print(datetime.datetime.now()+datetime.timedelta(-3)) #2018-10-13 15:55:30.991866 当前时间-3天
print(datetime.datetime.now()+datetime.timedelta(hours=3)) #2018-10-16 18:56:39.010447 当前时间+3小时
print(datetime.datetime.now()+datetime.timedelta(minutes=30)) #2018-10-16 16:27:40.545576 当前时间+30分
c_time=datetime.datetime.now()
print(c_time.replace(minute=3,hour=2)) #时间替换
二.random模块
import random
print(random.random()) #0-1 不包括1随机浮点数
print(random.randint(1,10)) #1-10 包括1和10 的整数
print(random.randrange(1,10)) #1-10包括1 不包括10的整数
print(random.choice([1,"323",[4,5]])) #1或者"323"或者[4,5]
print(random.sample([1,"323",[4,5]],2)) #列表元素任意2个组合
print(random.uniform(1,3)) ##大于1小于3的小数,如1.927109612082716
l=[1,5,9,8,7,56]
random.shuffle(l) ##打乱l的顺序,相当于"洗牌"
print(l)
#随机验证码 长度自定义 包括0-9 A-Z a-z
def get_auth_code(length):
res=""
for i in range(length):
a=random.randint(0,9)
b=chr(random.randint(65,90))
c=chr(random.randint(97,122))
s=random.choice([a,b,c])
res+=str(s)
return res
a=get_auth_code(5)
print(a)
三.OS模块
os模块是与操作系统交互的一个接口
import os
print(os.getcwd()) #获取当前的工作目录
print(os.chdir("F:\python practice\day16")) #切换工作目录
print(os.getcwd())
print(os.curdir) #当前目录 是一个点
print(os.pardir) #上一级目录 两个点
print(os.environ) #系统的环境变量
print(os.system("dir"))
os.makedirs("a/b/c") # 创建目录 可用递归创建
os.mkdir("AA3") # 创建一个目录
os.removedirs("a/b/c") # 递归删除 如果没有文件就删掉 有文件则保留
os.rmdir("AA3") #删除一个目录
os.remove(r"F:\python practice\day20\test1\test1.py") # 删除文件 仅能删除文件
print(os.listdir(r"F:\python practice\day20")) # 列出所有文件和文件夹名称
print(os.sep) # 获取当前平台的路径分隔符
print(os.linesep,end="") # 获取当前平台换行符
# 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的大小
四.sys模块
import sys,os
sys.argv #命令行参数List,第一个元素是程序本身的路径
sys.exit() #退出程序,正常退出时exit(0)
sys.version #获取python解释程序的版本信息
print(sys.maxsize) #最大的Int值
sys.path #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
print(sys.platform)
#指定宽度
print('[%-15s]' %'##')
print('[%-15s]' %'##')
print('[%15s]' %'###')
print('[%-15s]' %'####')
#进度条效果
""""
[# ]
[## ]
[### ]
[#### ]
"""
print('%s%%' %(100)) #第二个%号代表取消第一个%的特殊意义
print('[%%-%ds]' %50) #[%-50s]
print(('[%%-%ds]' %50) %'#')
print(('[%%-%ds]' %50) %'##')
print(('[%%-%ds]' %50) %'###')
#=========实现打印进度条函数==========
import sys
import time
def progress(percent,width=50):
if percent>=1:
percent=1
show_str=("[%%-%ds]" %width) %(int(width*percent)*"#")
print("\r%s %d%%" %(show_str,int(100*percent)),file=sys.stdout,flush=True,end="")
data_size=1025
recv_size=0
if recv_size<data_size:
time.sleep(0.1) #模拟数据的传输延迟
recv_size+=1024 #每次收1024
percent=recv_size/data_size #接收的比例
progress(percent,width=70) #进度条的宽度70
五.shutil模块
import shutil,os
# shutil.copyfileobj(fsrc,fdst,length) #将文件内容拷贝到另一个文件中
shutil.copyfileobj(open("a.txt","r"),open("b.txt","w"))
# shutil.copyfile(src,dst) #仅拷贝权限。内容、组、用户均不变
shutil.copyfile("f1.log","f2.log") #目标文件无需存在
#shutil.copy(src,dst) #拷贝文件和权限
shutil.copy("f1.log","f2.log")
#shutil.copy2(src,dst) #拷贝文件和状态信息
shutil.copy2("f1.log","f2.log")
#shutil.copytree(src, dst, symlinks=False, ignore=None) #递归的去拷贝文件夹
shutil.copytree(r"F:\python practice\day20\test1","test2",symlinks=True,ignore=shutil.ignore_patterns("*.pyc","tmp*"))
"""
通常的拷贝都把软连接拷贝成硬链接,即对待软连接来说,创建新的文件
"""
#shutil.rmtree(path[, ignore_errors[,onerror]]) #递归的去删除文件
shutil.rmtree(r"F:\python practice\day20\test1")
# shutil.move(src,dst) #递归的去移动文件,它类似mv命令,其实就是重命名。
shutil.move(r"F:\python practice\day20\test2","test3")
#shutil.make_archive(base_name,format)
#创建压缩包并返回文件路径,例如:zip、tar
#base_name:压缩包的文件名,也可以是压缩包的路径,只是文件名时,则保存至当前目录,否则保存至指定路径,
#format:压缩包的种类,"zip","tar","bztar","gztar"
#root_dir:要压缩的文件夹路径(默认当前目录)
#owner:用户
#group:组,默认当前组
#logger:用于记录日志,通常是logging.Logger对象
shutil 对压缩包的处理是调用ZipFile 和TarFile 两个模块来进行的,详细:
import zipfile
ret=shutil.make_archive("day21_bak_%s" %time.strftime("%Y-%m-%d"),"gztar",root_dir=r"F:\python practice\day20")
#压缩
z=zipfile.ZipFile("laxi.zip","w")
z.write("a.log")
z.write("data.data")
z.close()
#解压
z=zipfile.ZipFile("laxi.zip","r")
z.extractall(path=".")
z.close()
#
import tarfile
#
#
# 解压缩
t=tarfile.open(r"day21_bak_2018-10-17.tar.gz","r")
t.extractall(r"F:\python practice\day20\解包目录")
t.close()