time模块
该模块内部使⽤的时当前平台的c库 每个平台的c库⽀持的⽅法可能略有不同
时间三种格式
1.时间戳
2.本地时间
3.gm(UTC)世界统⼀时间
格式化时间
time.strftime("")
print(time.strftime("%Y-%m-%d %H:%M:%S"))
print(time.strftime("%Y-%m-%d %X"))
三种时间相互转换
时间戳转结构化时间 本地
print(time.localtime(111))
print(time.localtime(time.time))
时间戳转结构化时间 UTC
print(time.gmtime(1111))
结构化转时间戳
time.mktime(结构化)
结构化转格式化
time.strftime("格式",结构化时间)
格式化时间转结构化
time.strptime("2017-10-10","%Y-%m-%d")
datetime模块
timedelta模块表示时间差
包含三个可⽤名称
days seconds micreseconds微秒
⽀持加减乘除
可⽤⽅法
total_secondes
datetime
获取当前时间 会根据当前系统时区⾃动转换 ⽐较⽅便
print(datetime.datetime.now())
返回的是时间对象
对象中包含⼀些变量
年⽉⽇时分秒
时间对象的减法运算
⼀个时间对象与⼀个时间差对象timedelta 进⾏加减
print(datetime.datetime.now() +
datetime.timedelta(days=1,hours=1,minutes=1,seconds=1))
30天后是⼏⽉⼏号?
时间对象的替换操作
replace 可替换某个时间的值
random 模块 随机数⽣成模块
random 0-1 闭开 randint 0 - 3 闭闭 randrange 0 - 3 闭开
choice [1,2,32,3,2,"哈哈"] 随机选⼀个
sample([1,"a",["c","d"]],2) 随机选指定个数
uniform(1,3) 开开 浮点
shuffle(列表) 打乱顺序
练习 随机验证码
import random
def make_code(i):
res = ''
for j in range(i):
num = str(random.randint(0,9))
c = chr(random.randint(65,90))
s = random.choice([num,c])
res += s
return res
print(make_code(4))
sys 模块
1 sys.argv 命令⾏参数List,第⼀个元素是程序本身路径
2 sys.exit(n) 退出程序,正常退出时exit(0)
3 sys.version 获取Python解释程序的版本信息
4 sys.maxint 最⼤的Int值
5 sys.path 返回模块的搜索路径,初始化时使⽤PYTHONPATH环境变
量的值
6 sys.platform 返回操作系统平台名称
扩展
脚本执⾏时 很多时候需要使⽤进度条
如何实现
print("[###]")
print("[####]")
print("[#####]")
分析:
中括号位置是固定的变化的是⾥⾯的符号
格式化替换加占位 print("[%-50s]" % "#")
⼈家的是不换⾏的⼀直在⼀⾏刷新进度
实际上是新的内容覆盖了旧的内容感觉像是动画
中括号的宽度应该是不固定的 根据cmd进⾏调整 所以当做参数传进来
于是print("[%-%ds]")
发现不⾏说你传参数传多了
定义为⽅法
不换⾏打印 并将光标移动⾄⾏起始
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)),end='')
import time
recv_size=0 t
otal_size=111111
while recv_size < total_size:
time.sleep(1)
recv_size+=8096
percent=recv_size / total_size
progress(percent)
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获取系统环境变量
path模块
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的⼤⼩
# normcase ⽤于将路规范化 会将⼤写转为⼩写 斜杠改为当前系统分隔符
print(os.path.normcase("\\a\\b\\ABCS"))
# normpath⽤于将路径规范化 不仅将⾮法的分隔符替换为合法分隔符 还将
⼤写转为⼩写 并且会执⾏..的回到上⼀层
print(os.path.normpath("/a/b/../ABCS"))
shutil 模块
⾮常简便的⽂件操作 压缩包处理模块
shutil.copyfileobj 拷⻉⽂件 提供两个⽂件对象 ⻓度表示缓冲区⼤⼩
shutil.copyfile(src, dst)拷⻉⽂件 提供两个⽂件路径
shutil.copymode() 拷⻉⽂件权限 提供两个⽂件路径
shutil.copystat(src, dst) 拷⻉⽂件状态信息 最后访问 最后修改 权限 提供两
个⽂件路径
shutil.copy(src, dst) 拷⻉⽂件和权限 提供两个⽂件路径
shutil.copy2(src, dst) 拷⻉⽂件和状态信息 提供两个⽂件路径
shutil.ignore_patterns("mp3","*.py")
shutil.copytree(src, dst, symlinks=False, ignore=None) 拷⻉⽬录
symlinks默认False将软连接拷⻉为硬链接 否则拷⻉为软连接
shutil.rmtree 删除⽬录 可以设置忽略⽂件
shutil.move(src, dst)
移动⽬录和⽂件
压缩与解压缩
shutil 可以打包 但是⽆法解包 并且打包也是调⽤tarfile 和 zipFile完成
解压需要按照格式调⽤对应的模块
打包
shutil.make_archive("test","tar","/Users/jerry/PycharmProjects/package/packa
ge1")
import tarfile,zipfile
zip压缩
z = zipfile.ZipFile("test.zip","w")
z.write("sys.py")
z.write("start.py")
z.close()
zip解压
z = zipfile.ZipFile("test.zip",'r')
z.extractall("/Users/jerry/PycharmProjects/package/aaa")
z.close()
tar压缩
t = tarfile.open("test.tar","w")
t.add("start.py")
t.add("sys.py")
t.close()
tar解压
t = tarfile.open("test.tar")
t.extractall("aaa/")
t.close()
pickle模块
作用于序列化
序列化就是将内存中的数据持久化到硬盘
回顾 使用文件读写也能完成把数据持久化存储 但是有局限性 当数据比较复杂时用起来就很麻烦
例如 需要把一个字典存储到硬盘中 先转成字符串 写入 读取为字符串 转为原始的格式
所以就有了pickle
1.能将所有python中的数据序列化 int float str dic list tuple set bool
2.反序列化 将之前序列化的数据 在恢复成python的数据格式
pickle产生的数据 只能由python读取 (跨平台性差)
今后你开发程序不可能就是单机程序 你需要和其他设备 其他平台 交换数据
一三八四三八零零四三八
我们需要找到一种通用的数据格式 让各个平台都能识别
"""
users= {"name":"yyh","age":20,"hobbies":["打豆豆","飘"]}
# f = open("a.txt","wt",encoding="utf-8")
# f.write(str(users))
# f.close()
json 模块
用于处理json格式数据的模块
json 全称 JavaScrip Object Notation js的对象表示法
所以json能支持的数据类型就是js支持数据类型
json格式标准
能存储的有 str int float dic list bool
案列 要求 数据的最开始和最末尾 必须是{} []
{"name":"yyh"}
json是一种通用的数据交换格式 目前主流的语言都能够轻松解析
注意: 在使用json格式的时候 数据类型必须按照要求来写 并且 不支持python 元祖 True/Flase '' '''
常用方法
序列化
dump 处理文件
dumps 处理字符串
反序列化
load 处理文件
loads 处理字符串
# 将python格式的数据序列化为json格式 python中的任何类型都能被转化为json格式 表现形式不同
import json
users= {'name':"音乐会","age":20,"hobbies":("music","movies")}
# # print(json.dumps(users))
# json.dump(users,open("users.json","wt",encoding="utf-8"))
#
# json的反序列化
jsonstr= json.load(open("users.json","r",encoding="utf-8"))
print(jsonstr)
常用模块总结
"""
time
时间转换 ****
datetime
获取时间 ***
os
操作系统的文件路和目录
os.path *****
sys
解释器相关 用于设计脚本程序 ***
pickle
python本地序列化方式 比较局限 **
json
通用的数据交换格式 使用起来挺简单 *****
shutil
文件相关的高级操作 ***
random
随机数相关 简单 ****
"""