python 模块一补充
一.os模块
os模块是与操作系统交互的接口
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.system("bash command") 运行shell命令,直接显示 os.popen("bash command).read() 运行shell命令,获取执行结果 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.path # 把路径中不符合规范的/改成操作系统默认的格式 path = os.path.abspath('D:/sylar/s15/day19/4.os模块.py') print(path) #在操作系统中使用的是\而不是/ path= os.path.split('D:/sylar/s15/day19/4.os模块.py') print(path) # 就是把一个路径分成两段,第二段是一个文件/文件夹 如果需要一个值 ret1 = os.path.dirname('D:/sylar/s15/day19/4.os模块.py') ret2 = os.path.basename('D:/sylar/s15/day19/4.os模块.py') #os.path.dirname拿到的是os.path.split的第一个元素而os.path.baseame拿到是#os.path.split的第二个元素 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 size= os.path.getsize(r'D:\sylar\s15\day19\4.os模块.py') # 查看文件大小 print(size) ret1 = os.path.getsize('D:\sylar\s15\day19') ret2 = os.path.getsize('D:\sylar\s15\day18') ret3 = os.path.getsize('D:\sylar\s15\day17') ret4 = os.path.getsize('D:\sylar\s15') print(ret1,ret2,ret3,ret4) # 所有的文件夹 都至少是4096个字节 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
使用python代码统计一个文件夹下所有文件的总大小
1 def func(path): # r'D:\sylar\s15' 2 size_sum = 0 3 name_lst = os.listdir(path) 4 for name in name_lst: 5 path_abs = os.path.join(path,name) 6 if os.path.isdir(path_abs): 7 size = func(path_abs) 8 size_sum += size 9 else: 10 size_sum += os.path.getsize(path_abs) 11 return size_sum 12 13 ret = func(r'D:\sylar\s15') 14 print(ret)
二.序列化模块(json,pickle)
什么叫序列化,序列化就是把其他数据类型转换成字符串或者bytes的过程叫做序列化过程
json提供了四个功能:dumps,dump,loads,load
1 import json 2 dic = {'k1':'v1','k2':'v2','k3':'v3'} 3 str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串 4 print(type(str_dic),str_dic) #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"} 5 #注意,json转换完的字符串类型的字典中的字符串是由""表示的 6 7 dic2 = json.loads(str_dic) #反序列化:将一个字符串格式的字典转换成一个字典 8 #注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示 9 print(type(dic2),dic2) #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} 10 11 12 list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}] 13 str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型 14 print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}] 15 list_dic2 = json.loads(str_dic) 16 print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]
load和dump
1 import json 2 f = open('json_file','w') 3 dic = {'k1':'v1','k2':'v2','k3':'v3'} 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() 10 print(type(dic2),dic2)
ensure_ascii关键字参数
import json f = open('file','w') json.dump({'国籍':'中国'},f) ret = json.dumps({'国籍':'中国'}) f.write(ret+'\n') json.dump({'国籍':'美国'},f,ensure_ascii=False) ret = json.dumps({'国籍':'美国'},ensure_ascii=False) f.write(ret+'\n') f.close()
json的格式化输出
1 import json 2 data = {'username':['李华','二愣子'],'sex':'male','age':16} 3 json_dic2 = json.dumps(data,sort_keys=True,indent=2,separators=(',',':'),ensure_ascii=False) 4 print(json_dic2)
json的其他参数说明
1 Serialize obj to a JSON formatted str.(字符串表示的json对象) 2 Skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key 3 ensure_ascii:,当它为True的时候,所有非ASCII码字符显示为\uXXXX序列,只需在dump时将ensure_ascii设置为False即可,此时存入json的中文即可正常显示。) 4 If check_circular is false, then the circular reference check for container types will be skipped and a circular reference will result in an OverflowError (or worse). 5 If allow_nan is false, then it will be a ValueError to serialize out of range float values (nan, inf, -inf) in strict compliance of the JSON specification, instead of using the JavaScript equivalents (NaN, Infinity, -Infinity). 6 indent:应该是一个非负的整型,如果是0就是顶格分行显示,如果为空就是一行最紧凑显示,否则会换行且按照indent的数值显示前面的空白分行显示,这样打印出来的json数据也叫pretty-printed json 7 separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(‘,’,’:’);这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。 8 default(obj) is a function that should return a serializable version of obj or raise TypeError. The default simply raises TypeError. 9 sort_keys:将数据根据keys的值进行排序。 10 To use a custom JSONEncoder subclass (e.g. one that overrides the .default() method to serialize additional types), specify it with the cls kwarg; otherwise JSONEncoder is used.
json与pickle
- json,用于字符串 和 python数据类型间进行转换
- pickle,用于python特有的类型 和 python的数据类型间进行转换
pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化)
1 import pickle 2 dic = {'k1':'v1','k2':'v2','k3':'v3'} 3 str_dic = pickle.dumps(dic) 4 print(str_dic) #一串二进制内容 5 6 dic2 = pickle.loads(str_dic) 7 print(dic2) #字典 8 9 import time 10 struct_time = time.localtime(1000000000) 11 print(struct_time) 12 f = open('pickle_file','wb') 13 pickle.dump(struct_time,f) 14 f.close() 15 16 f = open('pickle_file','rb') 17 struct_time2 = pickle.load(f) 18 print(struct_time2.tm_year)
说明:pickle只适用于python中,而json使用与各种语言,例如像Java,c#,c++等等

浙公网安备 33010602011771号