python 常用模块
一、random模块
import random # 生成随机小数 print(random.random()) # 大于0且小于1的小数 # 0.2594428376868646 print(random.uniform(1, 4)) # 大于1且小于4的小数 # 2.6173235045726897 # 生成随机整数 print(random.randint(0, 7)) #大于0且小于7的整数 # 6 print(random.randrange(1, 10, 2)) #大于1且小于10的奇数 # 5 #随机选择列表中的一个值返回 print(random.choice([1, 'abc', [1, 'a'], (1, 2)])) # abc #随机选择多个返回,返回的个数为函数的第二个参数 print(random.sample([1, 'abc', [1, 'a'], (1, 2)], 2)) # #列表元素任意2个值 # [[1, 'a'], 'abc'] # 打乱列表顺序 li = [1,2,3,4,5,6] random.shuffle(li) #打乱的是原列表,不会生成新的列表 print(li) # [3, 4, 2, 6, 5, 1]
二、时间(time)模块
常用方法
time.sleep(5)
(线程)推迟指定的时间运行。单位为秒。
time.time()
获取当前时间戳
import time # 时间戳时间 print(time.time()) # 1534767726.0919542 # 格式化时间 t = time.localtime() print(t) # time.struct_time(tm_year=2018, tm_mon=8, tm_mday=20, tm_hour=20, tm_min=23, tm_sec=49, tm_wday=0, tm_yday=232, tm_isdst=0) # 格式化时间 print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2018-08-20 20:37:15 print(time.strftime('%y-%m-%d %H:%M:%S')) # 18-08-20 20:37:15 print(time.strftime("%c")) #外国时间格式 # Mon Aug 20 20:37:15 2018 # 结构化时间 t = time.localtime() print(t) # time.struct_time(tm_year=2018, tm_mon=8, tm_mday=20, tm_hour=20, tm_min=45, tm_sec=22, tm_wday=0, tm_yday=232, tm_isdst=0) print(t.tm_year) # 2018 # 时间戳换成字符串 t = time.localtime(1500000000) #转为结构化时间 ret = time.strftime('%y-%m-%d %H:%M:%S', t) print(ret) # 17-07-14 10:40:00 #字符串时间转时间戳 t = time.strptime('2008-8-8', '%Y-%m-%d') #转为结构化时间 ret = time.mktime(t) print(ret) # 1218124800.0
三、sys模块
sys 是和Python解释器打交道的
import sys print(sys.argv) #命令行参数List,第一个元素是程序本身路径 # x = sys.argv[1] 在命令行传入参数 print(sys.path) #返回模块的搜索路径
四、os模块
os是和操作系统交互的模块
import os os.makedirs('a1/a2/a3') #生成多层递归目录 os.removedirs('a1/a2/a3') #若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir('d1') #生成单级目录 os.rmdir('d1') #删除单级空目录,不为空则删不掉
os.system("bash command") #运行shell命令,直接显示 os.popen("bash command").read() #运行shell命令,获取执行结果 os.getcwd() #获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") #改变当前脚本工作目录;相当于shell下cd
# 把路径中不符合规范的/改成操作系统默认的格式 os.path.abspath(path) # 能够给能找到的相对路径改成绝对路径 os.path.abspath(path) # 就是把一个路径分成两段,第二段是一个文件/文件夹 os.path.split(path) # 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.dirname(path) # 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 # os.path.basename(path) # 如果你两个值都需要 os.path.split # 如果你只要一个值 os.path.dirname/os.path.basename # 判断文件/文件夹是否存在 os.path.exists(path) # 如果path是绝对路径,返回True os.path.isabs(path) # 如果path是一个存在的文件,返回True。否则返回False os.path.isfile(path) # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.join(path1[, path2[, ...]]) # 返回path所指向的文件或者目录的最后访问时间 os.path.getatime(path) # 返回path所指向的文件或者目录的最后修改时间 os.path.getmtime(path) # 返回path的大小 os.path.getsize(path)
五、序列化模块
1.序列化:
将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。
2.序列化的目的:
1、以某种存储形式使自定义对象持久化;
2、将对象从一个地方传递到另一个地方。
3、使程序更具维护性。
json 模块
import json # ret = json.dumps(dict) # 序列化 # res = json.loads(ret) # 反序列化
json 在所有的语言之间都通用 : json序列化的数据 在python上序列化了 那在java中也可以反序列化
能够处理的数据类型是非常有限的 : 字符串 列表 字典 数字
字典中的key只能是字符串
json
dumps loads
在内存中做数据转换 :
dumps 数据类型 转成 字符串 序列化
loads 字符串 转成 数据类型 反序列化
dump load
直接将数据类型写入文件,直接从文件中读出数据类型
dump 数据类型 写入 文件 序列化
load 文件 读出 数据类型 反序列化
json是所有语言都通用的一种序列化格式
只支持 列表 字典 字符串 数字
字典的key必须是字符串
pickle模块
json & pickle 模块
用于序列化的两个模块
json,用于字符串 和 python数据类型间进行转换
pickle,用于python特有的类型 和 python的数据类型间进行转换
pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化)
pickle模块:
1.支持在python中几乎所有的数据类型
2. dumps 序列化的结果只能是字节
3.只能在python中使用
4.在和文件操作的时候,需要用rb wb的模式打开文件
5.可以多次dump 和 多次load
import pickle dic = {(1,2,3):{'a','b'},1:'abc'} dic1 = {(1,2,3):{'a','b'},2:'abc'} dic2 = {(1,2,3):{'a','b'},3:'abc'} dic3 = {(1,2,3):{'a','b'},4:'abc'} with open('pickle_file','wb') as f: pickle.dump(dic, f) pickle.dump(dic1, f) pickle.dump(dic2, f) pickle.dump(dic3, f) with open('pickle_file','rb') as f: while True: try: ret = pickle.load(f) print(ret) except EOFError: break