python 之 序列化与反序列化、os模块
6.6 序列化与反序列化
-
特殊的字符串 , 只有:int / str / list / dict
-
最外层必须是列表或字典,如果包含字符串,必须是双引号"".
-
序列化:将python的值转换为json格式的字符串.
-
-
优点:所有语言通用
缺点:只能序列化基本的数据类型.
6.61 json.dumps
序列化:内存中的数据类型----》转成一种中间格式(字符串)----》存到文件中
import json
with open('db.json','wb') as f:
dic={'name':'egon','age':18}
res=json.dumps(dic) # json格式全都是双引号
print(res,type(res)) # {"name": "egon", "age": 18} <class 'str'>
f.write(res.encode('utf-8'))
6.62 json.loads
反序列化:文件----》读取中间格式(字符串)------》转成内存中数据类型
import json
with open('db.json','r',encoding='utf-8') as f:
data=f.read()
dic=json.loads(data)
print(dic,type(dic)) # {'name': 'egon', 'age': 18} <class 'dict'>
print(dic['name']) # egon
6.63 json.dump
import json
with open('db1.json','wt',encoding='utf-8') as f:
dic={'name':'egon','age':18}
json.dump(dic,f)
6.64 json.load
import json
with open('db1.json','rt',encoding='utf-8') as f:
dic=json.load(f)
print(dic['name']) # egon
6.65 pickle序列化
优点: python中所有的东西都能被序列化(除socket对象)
缺点: 序列化的内容只有python认识.
import pickle # pickle.dumps
s={1,2,3,4,}
res=pickle.dumps(s)
print(res,type(res)) # <class 'bytes'> ,转成bytes类型
with open('db.pkl','wb') as f:
f.write(res)
import pickle # pickle.dump
s={1,2,3}
with open('db1.pkl','wb') as f:
pickle.dump(s,f)
6.66 pickle反序列化
with open('db.pkl','rb') as f: # pickle.loads
data=f.read()
print(data)
s=pickle.loads(data)
print(s,type(s)) # {1, 2, 3, 4} <class 'set'>
with open('db1.pkl','rb') as f: #=pickle.load
s=pickle.load(f)
print(s,type(s)) # {1, 2, 3} <class 'set'>
6.7 os模块
os.path系列
-
os.path.abspath(path) 返回path规范化的绝对路径
import os
file_path=r'a\b\c\d.txt'
print(os.path.abspath(file_path)) #c:\users\desktop\a\b\c\d.txt -
os.path.split(path) 将path分割成目录和文件名二元组返回
res=os.path.split(r'c:\a\b\c\d.txt')
print(res) # ('c:\\a\\b\\c', 'd.txt')
print(res[-1]) # d.txt
print(res[0]) # c:\a\b\c -
os.path.isabs(path) 如果path是绝对路径,返回true
print(os.path.isabs(r'b/c/d.txt')) # false
-
os.path.normcase(path) 在linux和mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为反斜杠
print(os.path.normcase('c:/windows\\system32\\') ) # c:\windows\system32\
-
os.path.dirname(path) 返回path的目录 其实就是os.path.split(path)的第一个元素
import os
base_dir=os.path.dirname(os.path.dirname(__file__)) #__file__当前文件地址
print(base_dir) # os.path.dirname() 获取上一级地址路径 -
os.path.normpath( ) 规范化路径,如 .. 和 /
print(os.path.normpath('c://windows\\system32\\../temp/')) #'c:\\windows\\temp'
a='/users/jieli/test1/\\\a1/\\\\aa.py/../..' #/users/jieli/test1
print(os.path.normpath(a)) -
os.path.join( path1 [ , path2 [ , ... ] ] ) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
print(os.path.join('c:\\','a','b','a.txt')) #c:\a\b\a.txt
print(os.path.join('c:\\','a','d:\\','b','a.txt')) #d:\b\a.txt 第一个c:\a被忽略
print(os.path.join('a','b','a.txt')) #a\b\a.txt
res=os.path.normpath(os.path.join(__file__,'..','..'))
print(res) #c:\users\desktop\day15\下午 -
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
print(os.path.basename(r'c:\a\b\c\d.txt')) # d.txt
-
os.path.exists(path) 如果path存在,返回true;如果path不存在,返回false, 只管路径是否存在,不区分文件还是文件夹
print(os.path.exists(r'd:\code\sh_fullstack_s1\day15\下午\json.py')) #true
print(os.path.exists(r'd:\code\sh_fullstack_s1\day15')) #true -
os.path.isfile(path) 如果path是一个存在的文件,返回true。否则返回false
print(os.path.isfile(r'd:\code\sh_fullstack_s1\day15\下午')) #false
-
os.path.isdir(path) 如果path是一个存在的目录,则返回true。否则返回false
print(os.path.isdir(r'd:\code\sh_fullstack_s1\day15\下午')) #true
-
os.path.getsize(path) 返回path的大小
res=os.path.getsize(r'd:\code\sh_fullstack_s1\day15\上午\settings.py') # 单位是字节
print(res)
6.71 os路径处理
方式一:推荐使用
import os
import os,sys
possible_topdir = os.path.normpath(os.path.join( os.path.abspath(__file__),
os.pardir, #上一级
os.pardir,
os.pardir
))
sys.path.insert(0,possible_topdir)
方式二:不推荐使用
import os
import os,sys
base_dir=os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.insert(0,base_dir)
6.8 包的使用
推荐阅读
-
python 之 序列化与反序列化、os模块
-
Python开发之序列化与反序列化:pickle、json模块使用详解
-
Python 序列化模块(json,pickle,shelve) 百日筑基之得气(三)
-
python模块知识二 random -- 随机模块、序列化 、os模块、sys -- 系统模块
-
Python 对象序列化与反序列化之pickle json详细解析
-
Python 入门之 内置模块 -- 序列化模块(json模块、pickle模块)
-
Python开发之序列化与反序列化:pickle、json模块使用详解
-
python模块知识二 random -- 随机模块、序列化 、os模块、sys -- 系统模块
-
Python 序列化模块(json,pickle,shelve) 百日筑基之得气(三)
-
python模块之sys模块和序列化模块