知识点一:序列化与反序列化(json和pickple)

01 什么是序列化/反序列化
    序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者基于网络传输
    发序列化就是硬盘中或者网络中传来的一种数据格式转换成内存中数据结构

02 为什要有
    1、可以保存程序的运行状态
    2、数据的跨平台交互

03 怎么用
    json
        优点:
            跨平台性强
        缺点:
            只能支持/对应python部分的数据类型

pickle
        优点:
            可以支持/对应所有python的数据类型
        缺点:
            只能被python识别,不能跨平台
   
 json:
  序列化json.dump():是将字典转换成字符串类型,写入文件
  反序列化json.load():是将文件中的字符串类型,转换为字典类型读出
  
 pickle:
  序列化pickle.dump():是将字典转换成bytes类型,写入文件
  序列化pickle.load():是将从文件中将bytes类型,转换为字典类型读出

实验:
json序列化:内存中的数据类型------>中间格式json
1.序列化得到json_str (dumps接收1个参数)
json_str=json.dumps(user_info)
2.把json_str写入文件
with open('db.json','w',encoding='utf-8') as f:
    f.write(json_str)
1.2合并(用dump()接收2个参数)
with open('da.json','w',encoding='utf-8') as f:
    json.dump(user_info,f)  #文件的输出结果双引号 {"name": "yangzhizong", "age": 27}

总结:json格式不能识别单引号,全都是双引号
 转换后单引号默认都被转成了双引号

json的反序列化:
import json
1.从文件中读取db.json
with open('db.json','r',encoding='utf-8') as f:
   user_info=f.read()      #str类型
2.将文件转换成内存中的数据类型
user_info=json.loads(user_info)      #反序列后变为dict字典类型

1和2可以合并
with open('db.json','r',encoding='utf-8') as f:
    db_json=json.load(f)
    print(db_json)  # 反序后变为dict类型

pickle的序列化:
import pickle
name={'name':'yangzhizong','age':27}
1.序列化得到name
name=pickle.dumps(name)                  重点注意dumps(1个参数)               
print(name,type(name))   #name被转换成bytes类型 ,写入是应该用wb
2.把name写入文件
with open('db.pickle','wb',) as f:
    f.write(name)   #输出结果是二进制
1.2合并 (用dump()接收2个参数)                    重点注意dump(2个参数)
with open('db.pickle','wb',) as f:
    pickle.dump(name,f)

pickle的反序列化
import pickle
with open('db.pickle','rb') as f:
    info=pickle.load(f)
    print(info,type(info))   #输出结果为dict字典

知识点二:模块
1)time和datetime
import time,datetime
 1.时间戳
 start= time.time()
 time.sleep(3)
 stop= time.time()
 print(stop - start)  #3.0001089572906494

2.格式化的字符串形式
 显示格式:
 2018:06:20 16:23:22
 2018:06:20 16:23:22 PM
 print(time.strftime('%Y:%m:%d %X'))
 print(time.strftime('%Y:%m:%d %H:%M:%S %p ')) #%p表示上午和下午

 3.结构化的时间/时间对象
 显示格式:time.struct_time(tm_year=2018, tm_mon=6, ...)
 t1=time.localtime()
 print(t1)
 print(t1.tm_year)  #2018
 结果:time.struct_time(tm_year=2018, tm_mon=6, tm_mday=20, tm_hour=16, tm_min=28, tm_sec=48, tm_wday=2, tm_yday=171, tm_isdst=0)
  
 t1=time.gmtime() (是世界标准时间格式,会有时差的区别)
 print(t1)
 结果:time.struct_time(tm_year=2018, tm_mon=6, tm_mday=20, tm_hour=8, tm_min=28, tm_sec=48, tm_wday=2, tm_yday=171, tm_isdst=0)


 4.转换形式
 结构化时间与时间戳:
 显示格式:
 time.struct_time(tm_year=1970, tm_mon=1, tm_mday=15, tm_hour=14, tm_min=56, tm_sec=7, tm_wday=3, tm_yday=15, tm_isdst=0)
 time.struct_time(tm_year=1970, tm_mon=1, tm_mday=15, tm_hour=6, tm_min=56, tm_sec=7, tm_wday=3, tm_yday=15, tm_isdst=0)
 print(time.localtime(1234567))
 print(time.gmtime(1234567))
 
 
 
 结构化时间与格式化字符串时间
 print(time.strftime('%Y',time.localtime()))
 print(time.strptime('2011-03-07','%Y-%d-%m'))

# print(time.asctime())
 # print(time.ctime())
 # print(time.strftime('%a %b %d %H:%M:%S %Y'))

# print(time.asctime(time.localtime()))
 # print(time.ctime(123123123))

# print(time.strftime('%Y-%m-%d %X'))

# 获取格式化字符串形式的时间麻烦
 # 时间戳与格式化时间之间的转换麻烦
 # 获取之前或者未来的时间麻烦
 
 
 
 import datetime

# print(datetime.datetime.now())
 # print(datetime.datetime.fromtimestamp(1231233213))

# print(datetime.datetime.now() + datetime.timedelta(days=3))
 # print(datetime.datetime.now() + datetime.timedelta(days=-3))

s=datetime.datetime.now()
 print(s.replace(year=2020))

2)random随机取值
 import random
 print(random.random())  #(0,1) 默认是0-1之间的小数,不包含0/1
 print(random.randint(1,3)) #随机1-3整数包含、3
 print(random.randrange(1,3)) #顾头不顾尾
 print(random.choice([1,'egon',[1,2]])) #随机取一个值
 print(random.sample([1, 'aa', [4, 5]], )) # 最后一个数字代表随机取几个值的意思

random.shuffle():随机取值排序
import random
item=['a','b','c','d']
random.shuffle(item)
print(item)



3)os模块
 绝对路径:
 输出结果:E:\PycharmProjects\untitled\day18\课堂练习.py
 path=os.path.abspath(__file__)
 print(path)


将路径分成目录和文件名以元祖形式返回
 输出结果:('E:\\PycharmProjects\\untitled\\day18', '课堂练习.py')
 path=os.path.split(os.path.abspath(__file__))
 print(path)


返回path的目录os.path.split(path)的第一个元素
 输出结果:E:\PycharmProjects\untitled\day18
 print(os.path.dirname(os.path.abspath(__file__)))


返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。
 即os.path.split(path)的第二个元素
 print(os.path.basename(os.path.abspath(__file__)))


判断目录是否存在,返回值是True或者False
 os.path.exists(.day19)


判断是否是绝对路径(以盘符开始的c\d\e..),或相对路径(不是以盘符开始的)
 print(os.path.isabs(r'c:\a\b')) #True
 print(os.path.isabs(r'a\b'))  #False


另外在linux里面是以左斜杠开始作为根目录的起始位置
 print(os.path.isabs(r'/a/b')) #True
 print(os.path.isabs(r'a/b'))  #False


将多个路径组合后返回,取最后一个聚堆路径输出
 os.path.join(path1[, path2[, ...]])
 输出结果为:d:\a
 path=os.path.join(r'c:\\a','b','d:\\a') #第一个 \ 有转译的功能说明后面一个 \ 只是普通的字符
 print(path)


获取文件的大小:
 输出结果为:5366
 path=os.path.getsize(r'E:\PycharmProjects\untitled\day18\课堂练习.py')
 print(path)

 

Python序列化、date、random、os模块的更多相关文章

  1. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  2. Python文件系统功能:os模块

    Python文件系统功能:os模块 1.os模块方法分类 (1)目录: chdir() 改变工作目录 chroot() 设定当前进程的根目录 listdir() 列出指定目录下的所有文件名 mkdir ...

  3. Python 入门之 内置模块 -- os模块

    Python 入门之 内置模块 -- os模块 1.os os是和操作系统做交互,给操作发指令 os模块是与操作系统交互的一个接口,它提供的功能多与工作目录,路径,文件等相关 (1)工作路径 prin ...

  4. python基础之序列化 time random os

    序列化与反序列化 json  pickle 1.什么是序列化与反序列化? 序列化就是将内存中的数据结构转成一种中间格式储存到硬盘或者基于网络传输 反序列化是网络,硬盘将被序列化的对象重新读到内存 2. ...

  5. 13、Python文件处理、os模块、json/pickle序列化模块

    一.字符编码 Python3中字符串默认为Unicode编码. str类型的数据可以编码成其他字符编码的格式,编码的结果为bytes类型. # coding:gbk x = '上' # 当程序执行时, ...

  6. python的内置模块之os模块方法详解以及使用

    1.getcwd() 获取当前工作路径 import os print(os.getcwd()) C:\python35\python3.exe D:/pyproject/day21模块/os模块.p ...

  7. python 输入输出,file, os模块

    Python 输入和输出 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数. 第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout ...

  8. 【python基础语法】OS模块处理文件绝对路径,内置的异常类型、捕获、处理(第9天课堂笔记)

    import os """ 通过文件的路径去打开文件 相对路径:相对当前的工作路径去定位文件位置 .:代表当前路径 ..:代表上一级路径(父级路径) 绝对路径:相对于电脑 ...

  9. 时间模块 time 随机模块random os模块,sys模块

    时间模块  time #时间模块 import time #三种格式 #时间戳时间:是一个浮点数,以秒为单位,计算机用语 #结构化时间 :是一个元组 #用于中间转换 #格式化时间:str数据类型, 用 ...

  10. python杂记-1(os模块)

    os模块说明:python os模块包含普遍的操作系统功能 os.access(path, mode) # 检验权限模式 os.chdir(path) # 改变当前工作目录os.chflags(pat ...

随机推荐

  1. Git中文件属性的变化,被认为是文件有改动

    问题描述: 1.  从公司的git服务器上, 下载最新的代码(zip格式), 解压缩出来, 2.  过一段时间, 去执行git pull代码, 出现如下情况: $ git pull Updating ...

  2. hiho一下 第四十五周 博弈游戏·Nim游戏·二(转成NIm)

    Alice和Bob这一次准备玩一个关于硬币的游戏:N枚硬币排成一列,有的正面朝上,有的背面朝上,从左到右依次编号为1..N.现在两人轮流翻硬币,每次只能将一枚正面朝上的硬币翻过来,并且可以随自己的意愿 ...

  3. 【Orange Pi Lite2】 ——1《如何开始使用开源硬件》

    [Orange Pi Lite2] --1<如何开始使用开源硬件> 本文只在博客园发布 在开始前你需要准备的材料与软件 用户手册_Orange Pi Lite2 OrangePi_Lite ...

  4. MyEclipse Update Progress Error解决方法

    MyEclipse Update Progress Error现象:频繁弹出Update Progress(Time of error:……)窗口..log文件里 org.eclipse.swt.SW ...

  5. (六)VMware Harbor简单使用

    VMware Harbor简单使用 1. 登陆: [用户:admin  , 密码:Harbor12345]配置文件里设置的 登陆后的界面: 2. 用户管理: 2.1 新近用户 3. 仓库管理: 3.1 ...

  6. java基础—泛型

    一.体验泛型 JDK1.5之前的集合类中存在的问题——可以往集合中加入任意类型的对象,例如下面代码: 1 package cn.gacl.generic.summary; 2 3 import jav ...

  7. java基础——反射机制

    反射机制是什么 反射机制就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...

  8. LiteIDE 错误: go build xxxxxx: no non-test Go files in xxxx

    问题 c:/go/bin/go.exe build [C:/Users/Administrator/Desktop/go] go build _/C_/Users/Administrator/Desk ...

  9. Falsy Bouncer-freecodecamp算法题目

    Falsy Bouncer(过滤数组假值) 要求 删除数组中的所有假值.(在JavaScript中,假值有false.null.0."".undefined 和 NaN.) 思路 ...

  10. ubuntu16.04安装mongodb,创建数据库管理员,上传文件到服务器上

    1.导入软件源得公钥 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 2.为mongodb创建软件 ...