6.6 序列化与反序列化

  • 特殊的字符串 , 只有:int / str / list / dict

  • 最外层必须是列表或字典,如果包含字符串,必须是双引号"".

  • 序列化:将Python的值转换为json格式的字符串.

  • 反序列化:将json格式的字符串转换成Python的数据类型.

  • 优点:所有语言通用

    缺点:只能序列化基本的数据类型.

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 包的使用

最新文章

  1. C语言中的system函数参数及其作用
  2. UIToolbar 莫名黑线条 隐藏办法
  3. git查看日志
  4. MyEclipse 不能将WAR包导出的解决方法
  5. paip.数据挖掘--导出词库 清理太长的iptcode
  6. PHP json的插入和解析在数据库中的操作
  7. Android 高仿微信即时聊天 百度云为基础的推
  8. java基础(三):谈谈java异常的处理
  9. linux 中数据库的常用操作
  10. 键盘Hook【Delphi版】
  11. oracle 内连接(inner join)、外连接(outer join)、全连接(full join)
  12. DialogActivity
  13. 通过HTTP参数污染绕过WAF拦截 (转)
  14. Dalvik VM (DVM) 与Java VM (JVM) 的区别?
  15. flink统计根据账号每30秒 金额的平均值
  16. ANY和SOME 运算符
  17. 数据访问层 (DAO)
  18. phalcon:整合官方多模块功能,方便多表查询
  19. JavaScript中函数声明和函数表达式的区别
  20. Table View Programming Guide for iOS---(五)---Creating and Configuring a Table View

热门文章

  1. mysql错误:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated
  2. Swift 烧脑体操(三) - 高阶函数
  3. 《CSS权威指南(第三版)》---第一章 CSS和文档
  4. .gitignore文件配置:keil工程文件类型【转】
  5. SDUT OJ 螺旋矩阵
  6. C++中输出 位宽和小数点后位数 的控制
  7. html5--1.15 style元素与HTML样式基础
  8. 【HDU 4807】Lunch Time 最小费用最大流
  9. 【译】在ES6中如何优雅的使用Arguments和Parameters
  10. 每天一个linux命令(5):mkdir命令