常用内置模块(一)--time、os、sys、random、shutil、pickle、json
一、time模块
Python中,通常有这几种方式来表示时间:
1.时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
2.格式化的时间字符串(Format String)
3.结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
import time # 一、三种格式: # 1. 时间戳(获取当前秒数) # 从1970年1月1日(计算机元年)到现在的秒数 time.time() # 2. 格式化的字符串时间 print(time.strftime('%Y-%m-%d %X')) print(time.strftime('%Y-%m-%d %H:%M:%S %p')) # 2018-08-09 19:57:45 PM # 3. 时间对象(结构化时间) t = time.localtime() # 当地时间 print(t) print(t.tm_min) print(t.tm_mday) t1 = time.gmtime() # 世界标准时间 # 二、时间转换 # 1. 时间戳 --> 结构化时间 print(time.localtime(111111112)) print(time.gmtime(111111112)) # 2. 结构化时间 --> 时间戳 print(time.mktime(time.localtime())) # 3. 结构化时间 --> 格式化字符串时间 print(time.strftime('%Y',time.localtime())) # 只取出年 2018 # 4. 格式化字符串时间 --> 结构化时间 print(time.strptime('2011-03-07','%Y-%m-%d')) # 5. 结构化时间 --> %a %b %d %H %M %S %Y print(time.asctime(time.localtime())) # Thu Aug 9 19:57:45 2018 # 5. 时间戳 --> %a %b %d %H %M %S %Y print(time.ctime(12122121)) # Thu May 21 15:15:21 1970 time
二、datetime模块
1、python实现的一个时间处理模块,time用起来不太方便, 所以就有了datetime
2、优点:datetime相比time,更灵活
3、timedelta表示时间差
两个时间差可以加减乘除
时间差和datetime 可以加减
# 单独获取某个年月日 d1 = datetime.datetime.now() print(d1) #2019-01-14 21:35:44.637357 print(d1.year) #2019 print(d1.hour) #21 # 设定时间点 d2 = datetime.datetime(2018, 10, 12, 10, 23, 21) print(d2) #2018-10-12 10:23:21 # 计算两个时间的差 print(d1 - d2) #3712 days, 9:01:57.637357 # 替换指定时间 print(d1.replace(year=2017)) #2017-01-14 21:35:44.637357 # 表示时间差 print(datetime.timedelta(days=5)) #5 days, 0:00:00 # 时间差与datetime.datetime相加 print(d1 + datetime.timedelta(days=5)) #2019-01-19 21:35:44.637357 print(d1 + datetime.timedelta(weeks=3)) #2019-02-04 21:35:44.637357
三、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)
import random def make_code(n): res='' for i in range(n): s1=chr(random.randint(65,90)) s2=str(random.randint(0,9)) res+=random.choice([s1,s2]) return res print(make_code(9))
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的大小
四、sys模块
该模块与系统相关,一般用于设计脚本程序
sys.argv 命令行参数List,第一个元素是程序本身路径,获取cmd输入的参数 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 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 while recv_size < data_size: time.sleep(0.1) #模拟数据的传输延迟 recv_size+=1024 #每次收1024 percent=recv_size/data_size #接收的比例 progress(percent,width=70) #进度条的宽度70 打印进度条
五、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的大小
在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为饭斜杠。 >>> os.path.normcase('c:/windows\\system32\\') 'c:\\windows\\system32\\' 规范化路径,如..和/ >>> os.path.normpath('c://windows\\System32\\../Temp/') 'c:\\windows\\Temp' >>> a='/Users/jieli/test1/\\\a1/\\\\aa.py/../..' >>> print(os.path.normpath(a)) /Users/jieli/test1
os路径处理 #方式一:推荐使用 import os #具体应用 import os,sys possible_topdir = os.path.normpath(os.path.join( os.path.abspath(__file__), os.pardir, #上一级 os.pardir, os.pardir )) sys.path.insert(0,possible_topdir) #方式二:不推荐使用 os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
六、shutil模块
该模块用于简化文件的高级操作
主要是:复制,移动,删除,压缩文件
1、复制文件
copyfileobj(fsrc, fdst, length=16*1024)
1 import shutil 2shutil.copyfileobj(open("a.txt","r",encoding="utf8"),open("b.txt","w",encoding="utf-8"),length=1024)
2、压缩文件
利用shutil来创建压缩文件,仅支持tar和zip格式,内部调用zipFile,tarFile模块实现
1 import shutil 2 shutil.make_archive("test","zip",root_dir="D:\DabingDasheng\code")
3.、解压文件
import zipfile,tarfile # 解压zip z = zipfile.ZipFile(r"D:\DabingDasheng\test.zip") z.extractall() z.close() # 解压tar t = tarfile.open(r"D:\DabingDasheng\test.tar") t.extractall() t.close()
七、json模块 & pickle模块
序列化:
将内存中的数据结构转换成一种中间格式储存到硬盘或者基于网络传输
反序列化:
硬盘中或者基于网络传来的一种数据格式转换成内存中的数据结构
为什么要有序列化
- 可以保存程序的运行状态
- 数据的跨平台交互
想要在不同的编程语言之间传递对象,就必须把对象序列化为标准的中间格式
1. pickle: pickle的格式化: dump(数据类型、文件对象) dumps(数据类型) pickle的反序列化: load(文件对象) loads(bytes类型) 转换格式: 内存中的数据--->pickle格式--->bytes--->存到文件或网络传输 总结: 优点:能支持/对应全部的python数据类型 缺点:只能被python识别,不能跨平台
import pickle dic={'name':'alvin','age':23,'sex':'male'} print(type(dic))#<class 'dict'> j=pickle.dumps(dic) print(type(j))#<class 'bytes'> f=open('序列化对象_pickle','wb')#注意是w是写入str,wb是写入bytes,j是'bytes' f.write(j) #-------------------等价于pickle.dump(dic,f) f.close() #-------------------------反序列化 import pickle f=open('序列化对象_pickle','rb') data=pickle.loads(f.read())# 等价于data=pickle.load(f) print(data['age'])
2. json: json的格式化: dump(数据类型、文件对象) dumps(数据类型) json的反序列化: load(文件对象) loads(json格式的字符串) 转换格式 内存中的数据--->json格式--->字符串--->存到文件或网络传输 json 全称 JavaScrip Object Notation,js的对象表示法 用于处理json格式数据的模块,(数据以什么格式存进去,取出来还是原来的格式) json格式标准: json是一种通用的数据交换格式 目前主流的语言都能够轻松解析 注意: 在使用json格式的时候,数据类型必须按照要求来写,并且不支持python中的元组,True/Flase,'', ''',None 能存储的有:str,int,float,dic,list,bool 总结: 优点:跨平台性强 缺点:只能支持/对应部分python的部分数据类型
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)