一、序列化模块
将原本的字典、列表等内容转换成一个字符串等过程叫做序列化
import json # json模块提供了四个功能:dumps、dump、loads、load dic={"k1":"v1","k2":"v2","k3":"v3"} x = json.dumps(dic) # 序列化:将一个字典换成一个字符串 # 转换等字符串的字典类中的字符串由""表示 print(type(x),x) # 反序列化 y = json.loads(x) # 反序列化:将一个字符串格式的字典转换成字典 # 要用json.loads功能处理自处字符串类型的字典中必须是由""表示 print(type(y),y) # 处理嵌套的数据类型 ls = [1,2,(1,2,4,5,6),5,7,{"k1":"v1","k2":"v2","k3":"v3"}] x = json.dumps(ls) print(type(x),x) y = json.loads(x) print(type(y),y)
import json f = open("123", mode="w") dic = {"k1": "v2", "k2": "v2", "k3": "v3"} # dump方法是接收一个文件句柄,直接将字典转换成json字符串写入文件 json.dump(dic, f) f.close() f = open("123") # load是接收一个文件句柄,直接将文件中的json字符串转换成数据返回 dicc = json.load(f) f.close() print(type(dicc), dicc)
import json # json格式化输出 x = {"user": ["matt", "heking"], "age": 11, "sex": "man"} y = json.dumps(x, sort_keys=True, indent=2, separators=(",", ":"), ensure_ascii=False) print(y)
pickle:用于python特有的类型 和 python的数据类型间进行转换
pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load(不仅可以序列化字典、列表 还可以python中任意的数据类型序列化)
import pickle dic = {"k1":"v1","k2":"v2","k3":"v3"} x = pickle.dumps(dic) print(x) #返回一个二进制内容 y = pickle.loads(x) print(y) #返回一个字典
json是一种所有语言都可以使用都数据结构,如果将一个字典或者序列化成一个json文件,Java代码或js代码也可以拿来使用。如果使用pickle进行序列化,其他语言就不能使用。
如果序列化的内容是列表或者字典,可以使用json模块,
二、random模块
import random # 随机小数 x = random.random() # 生成随机小数,大于0小于1 print(x) y = random.uniform(1, 3) # 大于1小于3的小数 print(y) # 随机整数 x = random.randint(1, 5) # 大于1小于5的整数 print(x) y = random.randrange(1, 10, 2) #大于1小于10之间的奇数 print(y)
import random x = random.choice([1, "23", [4, 5]]) # 随机选择一个返回 print(x) y = random.sample([1, "23", [4, 5]], 2) #列表元素任意2组合 print(y)
import random # 大款列表顺序 x = [1,2,3,4,5] random.shuffle(x) #随机打乱次序 print(x)
import random # 随机生成验证码 def num(): code = "" for i in range(4): number = random.randint(0, 9) asc = chr(random.randint(65, 90)) # 随机在ascii码选择一个大写字母 asc2 = chr(random.randint(97,122)) # 随机在ascii码选择一个小写字母 add = random.choice([number, asc,asc2]) # join列表必须都是字符串 code = "".join([code, str(add)]) #将join后变拼接到code里 return code print(num())
三、OS模块
OS模块是与操作系统交互的一个接口
import os # os.makedirs("11/22") # 创建多层递归目录 # os.removedirs("11/22") # os.mkdir("11") # 创建一个单级目录 # os.rmdir("11") # 删除一个单级目录 # os.listdir("11") # 列车指定目录下所有文件子目录隐藏文件等,以列表方式显示 # os.remove("11") # 删除一个文件 # os.rename("x","y") # 重命名一个文件或目录 # os.stat("11") # 获取文件或目录信息
import os os.system("bash command") # 运行shell命令 直接显示 os.popen("bash command").read() # 运行shell命令 获取执行结果 x = os.getcwd() # 获取当前工作目录 print(x) os.chdir("111") # 改变当前脚本工作目录 linux下 cd命令
import os os.path.abspath(path=) # 返回path规范化绝对路径 os.path.split(path=) # 将path分割成目录文件名 按元组返回 os.path.dirname(path=) # 返回path目录 os.path.basename(path=) # 返回psth最后文件名 os.path.exists(path=) # 如果path存在,则返回True 否则False os.path.isabs(path=) # 如果path是绝对路径 返回True os.path.isfile(path=) # 如果path是一个存在文件 返回True os.path.isdir(path) # 如果path是一个存在等目录 返回True os.path.join(path=,path=) # 将多个路径组合返回 os.path.getatime(path) # 返回所指向的文件或者目录最后访问时间 os.path.getmtime(path) # 返回所指向的文件或目录最后修改时间 os.path.getsize(path) # 返回path的大小
OS模块运维所需
# os.stat 获取文件/目录信息的结构说明 import os y = os.stat(os.path.dirname(os.path.dirname(__file__))) print(y) os.stat_result(st_mode=16877, st_ino=6398488, st_dev=16777220, st_nlink=23, st_uid=501, st_gid=20, st_size=736, st_atime=1554103277, st_mtime=1554088340, st_ctime=1554088340) stat结构: st_mode:inode保护模式 st_ino:inode节点号 st_dev:驻留设备号 st_nlink:inode链接数 st_uid:所有者的用户ID st_gid:所有者的组ID st_size:普通文件以字节为单位的大小,包含等待某些特殊文件的数据 st_atime:上次访问的时间 st_mtime:最后一次修改时间 st_ctime:由操作系统报告的"ctime",在类Linux系统是最新的元数 据更改时间,在其他Windows是创建时间 os.sep # 输出操作系统特定的路径分隔符:windows为"\\",Linux为"/" os.name # 输出字符串指示当前使用平台:Windows-->"nt",Linux-->"posix" os.linesep # 输出当前平台使用的行终止符:Windows为"\r\n",linux为"\n" os.pathsep # 输出用于分割文件路径的字符串:Windows为";",Linux为":"
# sys是与python解释器交互的一个接口 import sys sys.argv # 命令行参数list,第一个元素是程序本身路径 sys.exit(n) # 退出程序,正常退出时exit(0),错误退出sys.exit(1) sys.version # 获取python解释器程序的版本信息 sys.path # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform # 返回操作系统平台名称 import sys try: sys.exit(1) except SystemExit as e: print(e)
四、time时间模块
# time时间模块 import time time.sleep(1) # 推迟指定的时间运行,单位为秒 print(time.time) # 获取当前时间戳 # 表示时间的的三种方式 # 在python中通常有三种方式来表示时间:时间戳、元组、格式化时间字符串。 # 1、时间戳:通常来说,时间戳表示从1970年1月1日0:0:0开始计算的偏移量 运行type(time.time()),返回float类型 # 2、格式化时间字符串:1999-12-01 %y # 两位数的年份表示(00-99) %Y # 四位数的年份表死(000-9999) %m # 月份(01-12) %d # 某一天(1-31) %H # 24小时制小时数(0-23) %I # 12小时制小时数(01-12) %M # 分钟数(00-59) %S # 秒(00-59) %a # 本地简化星期名称 %A # 本地完整星期名称 %b # 本地简化的月份名称 %B # 本地完整的月份名称 %c # 本地相应的日期表示和时间表示 %j # 年内的一天(001-366) %p # 本地A.M或P.M等价符 %U # 一年中的星期数(00-53)星期天为星期的开始 %w # 星期(0-6)星期天为星期的开始 %W # 一年中星期数(00-53)星期一为星期的开始 %x # 本地相应的日期表示 %X # 本地相应的时间表示 %Z # 当前时区的名称 %% # 转译%本身 # 3、元组:元组*有9个元素 年、月、日、时、分、秒、一年内第几周、一年内第几天
import time print(time.time()) # 时间戳 print(time.strftime("%Y-%m-%d %X")) # 时间字符串 print(time.strftime("%Y-%m-%d %H:%M:%S")) print(time.localtime()) # 时间元组: localtime将一个时间戳转换为当前时区的struct_time # 时间戳是计算机能够识别的时间,时间字符串是人能够看懂的时间,时间元组则是用来操作时间的
# 时间戳-->结构化时间 # time.gmtime(时间戳) # UTC时间,与英国伦敦当地时间一致 # time.localtime(时间戳) # 当地时间 print(time.gmtime(120000000)) # 伦敦时间 time.struct_time(tm_year=1973, tm_mon=10, tm_mday=20, tm_hour=21, tm_min=20, tm_sec=0, tm_wday=5, tm_yday=293, tm_isdst=0) print(time.localtime(120000000)) time.struct_time(tm_year=1973, tm_mon=10, tm_mday=21, tm_hour=5, tm_min=20, tm_sec=0, tm_wday=6, tm_yday=294, tm_isdst=0) # 结构化时间--->时间戳 # time.mktime(结构化时间) x = time.localtime(1200000) print(time.mktime(x))
# 结构化时间--->字符串时间 # time.strftime("格式定义","结构化时间") # 结构化时间参数不传则显示当前时间 print(time.strftime("%Y-%m-%d %X")) print(time.strftime("%Y-%m-%d",time.localtime(130000000))) # 字符串时间--->结构化时间 # time.strptime(时间字符串,字符串对应格式) print(time.strptime("2000-2-23","%Y-%m-%d")) time.struct_time(tm_year=2000, tm_mon=2, tm_mday=23, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=54, tm_isdst=-1) print(time.strptime("5/13/2000","%m/%d/%Y")) time.struct_time(tm_year=2000, tm_mon=5, tm_mday=13, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=134, tm_isdst=-1)
# 结构化时间--> %a %b %d %H:%M:%S %Y # time.asctime(结构化时间) 如不传参数,直接返回当前时间格式化串 print(time.asctime(time.localtime(110000000))) # Wed Jun 27 11:33:20 1973 print(time.asctime()) # Tue Apr 2 16:37:34 2019 # 时间戳---> %a %b %d %H:%M:%S %Y # time.ctime(时间戳) # 如不串参数,直接返回当前时间的格式化串 print(time.ctime()) Tue Apr 2 16:42:13 2019 print(time.ctime(155500000)) Fri Dec 6 02:26:40 1974
# 计算时间差 import time # 将字符串-->格式化时间--> 时间戳 x = time.mktime(time.strptime("2010-12-23 12:42:23", "%Y-%m-%d %H:%M:%S")) y = time.mktime(time.strptime("2011-12-30 12:33:32", "%Y-%m-%d %H:%M:%S")) z = y - x # 现在时间减去过去时间差 a = time.gmtime(z) print("过去了%d年%d月%d天%d时%d分%d秒" % (a.tm_yday - 1970, a.tm_mon - 1, a.tm_mday - 1, a.tm_hour, a.tm_min, a.tm_sec))