常用模块 os模块 序列化模块

Posted mlhz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用模块 os模块 序列化模块相关的知识,希望对你有一定的参考价值。

技术分享图片
 1 os.path.abspath(path) 返回这个文件的绝对路径
 2 os.path.split(path) 把一个路径分成两段 第二段是一个文件/文件夹
 3 os.path.dirname(path) 返回path的目录
 4 os.path.basename(path) 返回path 最后的文件名
 5 os.path.exists(path)如果路径存在 那么返回True ,不存在 返回false
 6 os.path.isabs(path)判断是否是绝对路径
 7 os.path.isfile(path)判断是否是一个文件 
 8 os.isdir(path) 判断文件或文件夹是否存在
 9 os.path.join(path1[...path2,path3])将多个路径组合后返回
10 os.path.getmtime(path) 返回path 指向的文件或者目录的最后访问时间
11 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
12 os.path.getsize(path) 返回path的大小
13 os.listdir 查看文件下的目录
os模块的常用方法

 

技术分享图片
 1 #拿到这个我文件夹下所有的文件或文件夹
 2 是文件就取文件大小 是文件夹就再打开这个文件夹,在取文件 计算大小
 3 
 4 递归
 5 import os
 6 def func(path):
 7     size_sum=0
 8     name_lst=os.listdir(path)
 9     for name in name_lst:
10          path_abs=os.path.join(path,name)
11          if os.path.isdir(path_abs):
12                  size=func(path_abs)
13                  size_sum +=size
14          else:
15                   size_sum +=os.path.getsize(path_abs)
16       return size_sum
17 ret=func(文件夹路径)
18 print(ret)
19 
20 
21 
22 
23 循环
24 import os
25 lst=[C:python文件,]     列表
26 size_sum=0
27 while lst:       循环列表
28     path=lst.pop()     把列表中的元素弹出来
29     path_list=os.listdir(path)    查看路径下的文件 
30     for name in path_list:         循环文件
31         path_abs=os.path.join(path,name)    
32         if os.path.isdir(path_abs):      文件夹的逻辑
33             lst.append(path_abs)
34         else:
35             size_sum+=os.path.getsize(path_abs)
36 print(size_sum)
统计文件的大小

 

1 序列化模块

什么叫序列化?-----将原本的字典。列表等内容转换成一个字符串的过程就叫做序列化


序列化:字符串 bytes

序列: 列表,元组,字符串,bytes

 

为什么要把其他的数据类型转换成字符串?
1 能够在网络上传输的只能是bytes

2 能够在存储在文件里的只能是bytes和str

 

技术分享图片

 

json 模块

1 json模块提供了四个功能:dumps,dump,loads.load

2 json在所有的语言之间都通用:json序列化的数据 在python上序列化了,能过处理的数据类型是非常有限的:字符串 列表 字典 数字,字典中的key值必须是字符串

3

技术分享图片
 1 import json
 2 dic ={k1:v1,k2:v2,k3:v3}
 3 str_dic=json.dumps(dic)   #序列化 ;将一个字典转换成一个字符串
 4 print(str_dic,type(str_dic))
 5 #注意json换完的字符串类型的字典中的字符串是由”“表示
 6 # 结果:{"k1": "v1", "k2": "v2", "k3": "v3"} <class ‘str‘>
 7 
 8 
 9 dic2=json.loads(str_dic)    #反序列化:将字符串格式的字典转换成一个字典
10 print(dic2,type(dic2))
11 #结果:{‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘, ‘k3‘: ‘v3‘} <class ‘dict‘>
dumps和loads
技术分享图片
 1 dump 和load是直接操作文件的
 2 import json
 3 # dic ={‘k1‘:‘v1‘,‘k2‘:‘v2‘,‘k3‘:‘v3‘}
 4 # with open(‘json_file‘,mode=‘a‘) as f:   
 5 #     json.dump(dic,f)       将字典转换成字符串写入到文件中
 6 
 7 
 8 with open(json_file,mode=r) as f:
 9     dic=json.load(f)    从文件中将字符串字典转换成字典
10 print(dic.keys())
dump 和load
技术分享图片
 1 问题一:
 2 import json
 3 dic = {1 : value,2 : value2}
 4 ret = json.dumps(dic)  # 序列化
 5 print(dic,type(dic))      
 6 print(ret,type(ret))
 7 
 8 res=json.loads(ret)
 9 print(res,type(res))
10 
11 结果:
12 {1: value, 2: value2} <class dict>    没序列化之前
13 {"1": "value", "2": "value2"} <class str>    序列化之后
14 {1: value, 2: value2} <class dict>      反序列化之后  int类型的1 变成了字符串类型的‘1’    和原来的的字典不一样 因此在使用json方法的序列化和反序列化时 不能用数字作为键
15 
16 
17 问题2
18 import json
19 dic = {r : [1,2,3],t : (4,5,aa)}
20 ret = json.dumps(dic)  # 序列化
21 print(dic,type(dic))
22 print(ret,type(ret))
23 
24 结果:
25 {r: [1, 2, 3], 2: (4, 5, aa)} <class dict>
26 {"r": [1, 2, 3], "2": [4, 5, "aa"]} <class str>
27  
28 在序列化的时候元组变成列表了  
29 
30 问题3
31 mport json
32 s = {1,2,aaa}  集合不是
33 json.dumps(s)
34 
35 结果:TypeError: Object of type set is not JSON serializable
36 
37 问题4:
38 json.dumps({(1,2,3):123})
39 keys must be a string
40 
41 键值必须时字符串类型
json存在的几个问题
技术分享图片
 1 import json
 2 dic= {key : value,key2 : value2}
 3 ret=json.dumps(dic)
 4 with open(json_file,a) as f:
 5     f.write(ret)
 6 
 7 
 8 with open(json_file,r) as f:
 9     str_dic=f.read()
10     dic=json.loads(str_dic)
11     json.loads(f)
向文件夹中记录字典
技术分享图片
 1 存文件
 2 dic = {key1 : value1,key2 : value2}
 3 with open(json_file,a) as f:
 4      str_dic=json.dumps(dic)
 5      f.write(str_dic+
)
 6      str_dic = json.dumps(dic)
 7      f.write(str_dic + 
)
 8      str_dic = json.dumps(dic)
 9      f.write(str_dic + 
)
10      
11 
12 
13 
14 读取文件
15 with open(json_file,r) as f:
16 for line in f:
17     dic=json.loads(line.strip())
18     print(dic.kes())
把一个一个的字典放在文件中

 


4 json 中的dumps loads 和dump load的区别

(1)dumps loads

在内存中做数据类型转换:

dumps   数据类型 转成 字符串 序列化

loads    字符串类型 转成 数据类型 反序列化

 

(2) dump load

直接将数据类型写入文件,直接从文件中读出数据类型

   dump 数据类型 写入 文件 序列化   

   load   文件 读出 数据类型  反序列化

   dump 在存取文件时能连续存 但读取的时候(load)不能连续取

 

 

pickle模块:pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load  (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化

 




以上是关于常用模块 os模块 序列化模块的主要内容,如果未能解决你的问题,请参考以下文章

常用模块一(os模块序列化模块(json,pickle))

Python之常用模块(re,时间,random,os,sys,序列化模块)(Day20)

Python开发中常用的模块都有哪些?

八:常用模块

常用模块

常用模块知识