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

python 之 序列化与反序列化、os模块的更多相关文章

  1. python json序列化与反序列化操作

    python json序列化与反序列化操作 # dumps() dict-->str 序列化 # loads() str---dict 反序列化 result1 = json.dumps({'a ...

  2. python的序列化和反序列化以及json

    python 的序列化和反序列化用于内存之间的共享,包括服务器和客户端的共享,两个Python程序之间的共享,以及以字符串的形式存储到硬盘中. pyhton 的pickle 可以对Python的各种数 ...

  3. Python的路径操作(os模块与pathlib模块)

    Python的路径操作(os模块与pathlib模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.os.path模块(Python 3.4版本之前推荐使用该模块) #!/u ...

  4. python:序列化与反序列化(json、pickle、shelve)

    本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...

  5. python 的序列化和反序列化

    什么是序列化?简单来说就是将数据存储到物理内存上的过程叫序列化. 什么是反序列化?将数据从物理内存存储到程序内存的过程叫做反序列化. 下面来看一下python中使用json进行序列化和反序列化的实例d ...

  6. python 中文件输入输出及os模块对文件系统的操作

    整理了一下python 中文件的输入输出及主要介绍一些os模块中对文件系统的操作. 文件输入输出 1.内建函数open(file_name,文件打开模式,通用换行符支持),打开文件返回文件对象. 2. ...

  7. Python(七)之OS模块

    文件系统功能:os模块 python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关.以下列举常用的命令: 目录: os.mkdir('/tmp/ ...

  8. Python Json序列化与反序列化

    在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象.在python的标准库中,专门提供了json ...

  9. Python之文件操作:os模块

    Python os 模块提供了一个统一的操作系统接口函数 一.对于系统的操作 1.os.name 当前使用平台 其中 ‘nt’ 是 windows,’posix’ 是linux 或者 unix 2.o ...

随机推荐

  1. 《C prime plus (第五版)》 ---第12章 存储类.链接和内存管理

    12-1:存储类: 1.作用域: 代码块作用域,函数原型作用域和文件作用域. 2.链接:分为外部链接,内部链接和空链接.代码块作用域和函数原型作用域都是空连接,意味着是私有的.而文件作用域的变量可能是 ...

  2. BA优化PnP的思路

    由之前的PnP,可以求出一个R,t,K又是已知的.而且空间点的世界坐标知道,第二个相机位姿的像素坐标也是知道的.就可以利用它们进行优化.首先确定变量为const vector<Point3f&g ...

  3. 城市旅游ppt模板

    城市旅游ppt模板,城市,旅游,旅行,休闲. 下载:http://www.huiyi8.com/lvyoumuban/ppt/

  4. 【转】PHP生成器 (generator)和协程的实现

    原文地址:https://phphub.org/topics/1430 1.一切从 Iterator 和 Generator 开始 为便于新入门开发者理解,本文一半篇幅是讲述迭代器接口(Iterato ...

  5. Facebook的实时流处理技术——Scuba是Facebook的一个非常快速、分布式的内存数据库,用于实时分析和查询

    Scuba,Facebook的一个非常快速.分布式的内存数据库,用于实时分析和查询.是Facebook的回归分析代码.错误报告监控.广告收入监控和性能调试的背后主力. Facebook的实时流处理技术 ...

  6. poj-1986 Distance Queries(lca+ST+dfs)

    题目链接: Distance Queries Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 11531   Accepted ...

  7. redis cluster 实践总结

      最近项目接触到了redis cluster,现在趁着使用做一下总结,记录一下遇到过的问题,简单的概述一下常用到的命令和功能. 本篇文章主要是以运维的角度去讲述如何去更好的规划redis clust ...

  8. MySQL与EXCEL sum sumif sumifs 函数结合_品牌汇总_20161101

    计算一些数不难,整体来说还是要培养自我的逻辑意识,逻辑清楚,代码自然而然就知道,总体上训练自己的逻辑,一个是从用户角度,一个是从产品角度. 用户角度需要考虑的是用户的活跃度,具体又可以细分为用户的注册 ...

  9. I/O:Unit1

    编程,从键盘读入学生成绩(0~100分),共15名学生,计算并显示总分.平均成绩.单的学生成绩 ; sum: avg: DATA1 SEGMENT STU DB ,,,,,,,,,,,,,, SUM ...

  10. cocos2dx unzip、createDir

    转自:http://www.cnblogs.com/xioapingguo/p/4037323.html static unsigned long _maxUnzipBufSize = 0x50000 ...