Python 中常见的模块
一、时间 time 模块
1.时间的表示类型分为3种:时间戳Timestamp、结构化时间Struct_time,字符串时间Format string
time.time()
生成一个当前时间的时间戳。 结果:1502180997.5874085
time.localtime() 生成一个本地时间的结构化时间
结果 :time.struct_time(tm_year=2017, tm_mon=8, tm_mday=8, tm_hour=16, tm_min=29, tm_sec=57, tm_wday=1, tm_yday=220, tm_isdst=0)
time.strftime('%Y-%m-%d') 生成一个当前时间的字符串型的时间 ,里边的格式(参数)必须要指定格式
结果:2017-08-08
2. 3种时间类型的转化关系,以及转化方法。
示例1:
1 时间戳 与 结构化时间 之间的转化关系 2 now = time.time() # 生成一个时间戳 3 now_struc = time.localtime(now) # 把之间戳,转化成结构化的时间,当地时区。还有个是time.gmtime(),返回0时区的结构化时间。 4 print(now_struc) 5 6 now_1 = time.mktime(now_struc) # 把结构化的时间,转化成对应的时间戳 7 print(now_1) 8 9 结果: 10 time.struct_time(tm_year=2017, tm_mon=8, tm_mday=8, tm_hour=16, tm_min=40, tm_sec=53, tm_wday=1, tm_yday=220, tm_isdst=0) 11 12 1502181653.0
示例2
1 # 结构化时间 与 字符型时间 的转化关系 2 3 now_struc = time.localtime() # 当前结构化的时间 4 now_str = time.strftime('%Y-%m-%d %H:%M:%S',now_struc) # 前一个参数指定要转化成的格式,第二个参数是要转化的结构化时间。 5 6 print(now_struc) 7 print(now_str) 8 9 结果: 10 time.struct_time(tm_year=2017, tm_mon=8, tm_mday=8, tm_hour=16, tm_min=50, tm_sec=8, tm_wday=1, tm_yday=220, tm_isdst=0) 11 12 2017-08-08 16:50:08
二、random随机模块
1 import random 2 print(random.random()) # 从0-1之间的小数 3 4 print(random.uniform(1,3)) # 1-3之间的小数 5 6 print(random.randint(1,100)) # 1-100之间的整数 7 8 print(random.randrange(1,100)) # 1-100 9 print(random.randrange(1,100,2)) # 增加了步长,注意:顾头不顾尾 10 11 # 随机生成一个返回 12 print(random.choice([1,2,'a','b'])) # 选择一个 13 14 print(random.sample([1,2,'a','b'],3)) # 可选多个,这里是一次性选3个, 15 16 # 打乱顺序 17 li = list(range(1,20)) 18 print(li) 19 random.shuffle(li) # 打乱顺序 20 print(li)
验证码的练习:
# 4位数的验证码,数字,字母组成。
1 li = [] 2 for i in range(4): 3 num = str(random.randint(0, 9)) 4 alpha = str(chr(random.randint(65, 90))) 5 ret = random.choice([num, alpha]) 6 li.append(ret) 7 ret = ''.join(li) 8 print(ret)
三、OS模块
os模块是与操作系统交互的一个接口
1 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 2 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd 3 os.curdir 返回当前目录: ('.') 4 os.pardir 获取当前目录的父目录字符串名:('..') 5 os.makedirs('dirname1/dirname2') 可生成多层递归目录 6 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 7 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname 8 os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname 9 os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 10 os.remove() 删除一个文件 11 os.rename("oldname","newname") 重命名文件/目录 12 os.stat('path/filename') 获取文件/目录信息 13 os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" 14 os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" 15 os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: 16 os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' 17 os.system("bash command") 运行shell命令,直接显示 18 os.popen("bash command) 运行shell命令,获取执行结果 19 os.environ 获取系统环境变量 20 21 os.path 22 23 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以/或\结尾,那么就会返回空值。 24 即os.path.split(path)的第二个元素 25 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False 26 os.path.isabs(path) 如果path是绝对路径,返回True 27 os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False 28 os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False 29 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 30 os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 31 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 32 os.path.getsize(path) 返回path的大小 33 '''
四、sys模块
sys模块是与python解释器交互的一个接口
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 返回操作系统平台名称
五、序列化模块 (json、pickle、shelve)
什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。
序列化的目的:
1.以某种存储形式使自定义对象持久化;
2.将对象从一个地方传递到另一个地方;
3.使程序更具维护性。
JSON模块
4个功能:dumps\loads dump\load(跟文件相关)
1 import json 2 # 序列化----转化成字符串 json.dumps() 3 dic = {'k1':[1,2,3],'k2':'v2','k3':'v3'} 4 str_dic = json.dumps(dic) # 序列化 5 print(str_dic,type(str_dic)) 6 7 结果: 8 {"k1": [1, 2, 3], "k2": "v2", "k3": "v3"} <class 'str'> 9 注意:json序列化的字符串类型的字典中的字符串都是由“”表示的。 10 11 12 # 反序列化 json.loads() 13 dic1 = json.loads(str_dic) 14 print(dic1,type(dic1)) 15 16 # 结果 17 {'k1': [1, 2, 3], 'k2': 'v2', 'k3': 'v3'} <class 'dict'>
json 中dump 与load 的用法
1 # dump 与 load 的用法 2 f = open('json_file','w') 3 dic = {'k1':'v1','k2':'v2'} 4 json.dump(dic,f) # dump 方法接收一个文件句柄,直接将字典转换成json字符串写入, 5 f.close() 6 7 f = open('json_file') 8 dic2 = json.load(f) # load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回。 9 f.close()
pickle 模块
1 import pickle 2 3 dic = {'k1:':'v1','k2':'v2'} 4 5 str_dic = pickle.dumps(dic) # 序列化 6 print(str_dic,type(str_dic)) 7 >>>b'\x80\x03}q\x00(X\x03\x00\x00\x00k1:q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00\x00\x00v2q\x04u.' <class 'bytes'> 8 9 10 dic2 = pickle.loads(str_dic) # 反序列化 11 print(dic2,type(dic2)) 12 13 >>>{'k1:': 'v1', 'k2': 'v2'} <class 'dict'>
dump 和 load (跟文件相关)
1 struct_time = time.localtime(1000000000) 2 print(struct_time) 3 f = open('pickle_file','wb') 4 pickle.dump(struct_time,f) # 序列化之后,写入文件. 5 f.close() 6 7 f = open('pickle_file','rb') 8 struct_time2 = pickle.load(f) # 反序列化,并读出来, 9 print(struct_time2)
shelve 模块
1 import shelve 2 f = shelve.open('shelve_file') 3 f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'} #直接对文件句柄操作,就可以存入数据 4 f.close() 5 6 import shelve 7 f1 = shelve.open('shelve_file') 8 existing = f1['key'] #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错 9 f1.close() 10 print(existing) 11 12 shelve
这个模块有个限制,它不支持多个应用同一时间往同一个DB进行写操作。所以当我们知道我们的应用如果只进行读操作,我们可以让shelve通过只读方式打开DB