一、eval模拟序列化操作

1、序列化

内存中的数据-------->转成一种中间格式(字符串)---------->存到文件中

dic={'name':'egon','age':18}
with open('db','w',encoding='utf-8')as f:
f.write(str(dic))

db文本内容:

{'name': 'egon', 'age': 18}

2、反序列化

文件-------->读取中间格式(字符串)--------->eval转成内存中的数据结构

with open('db','r',encoding='utf-8')as f:
data=f.read()
dic=eval(data)
print(dic,type(dic))

  执行结果:

{'name': 'egon', 'age': 18} <class 'dict'>

3、python中eval不适合做序列化

x='[null,true,false,1]'
eval(x)
1、eval会报错:功能是把两边的引号去掉把[null,true,false,1]拿出来
2、eval不能识别null,true,false,只能识别python的数据格式
#因此:不能用eval做序列化。

二、json模块

1、序列化json的使用及识别的python类型

import json
x='[null,true,false,1]'
res=json.loads(x)
print(res,type(res))

  执行结果:

[None, True, False, 1] <class 'list'>

注:json识别python的类型:

'''
JSON pyhton类型
{} dict
[] list
'string' str
1234.56 int或float
ture/false Ture/False
null None
'''

2、json使用方式一(json.dumps, json.loads)

2.1、序列化:内存中的数据结构--------->转成一种中间格式(字符串)----------->存到文件中

import json
dic={'name':'egon','age':18}
res=json.dumps(dic)#dumps把单引号准换成双引号
print(res,type(res))#json格式全都是双引号

  执行结果:

{"name": "egon", "age": 18} <class 'str'> #把内存中的字典转成了字符串

写到硬盘上:

with open('db.json','w',encoding='utf-8')as f:
f.write(res)

 执行结果:db.json内容

{"name": "egon", "age": 18}

2.2、反序列化:文件--------->读取中间格式(字符串)--------->转成内存中的数据结构

with open('db.json','r',encoding='utf-8')as f:
data=f.read()
dic=json.loads(data)
print(dic,type(dic),dic['name'])

  执行结果:

{'name': 'egon', 'age': 18} <class 'dict'> egon

3、json使用方式二(json.dump, json.load)

3.1、序列化:

import json
dic={'name':'egon','age':18} with open('db1.json','wt',encoding='utf-8')as f:
json.dump(dic,f)

  执行结果:db1.json内容

{"name": "egon", "age": 18}

3.2、反序列化

import json
with open('db1.json','rt',encoding='utf-8')as f:
dic=json.load(f)
print(dic)

  执行结果:

{'name': 'egon', 'age': 18}

三、pickle模块(序列化)

注:pickle只适用于python内部使用,不适合跨平台使用

1、pickle模块使用方法一(pickle.dumps,  pickle.loads)

1.1、序列化

import pickle
s={1,2,3,4,}#集合
res=pickle.dumps(s)
print(s,type(res))
with open('db.pkl','wb')as f:
f.write(res)

1.2反序列化

import pickle
with open('db.pkl','rb')as f:
data=f.read()
# print(data) #执行结果:b'\x80\x03cbuiltins\nset\nq\x00]q\x01(K\x01K\x02K\x03K\x04e\x85q\x02Rq\x03.'
s=pickle.loads(data)
print(s,type(s)) #执行结果:{1, 2, 3, 4} <class 'set'>

2、pickle模块使用方法二(pickle.dump, pickle.load)

2.1、序列化

import pickle
s={1,2,3,4,}
with open('db.pkl','wb')as f:
pickle.dump(s,f)

2.2、反序列化

import pickle
with open('db.pkl','rb')as f:
s=pickle.load(f)
print(s,type(s))#执行结果:{1, 2, 3, 4} <class 'set'>

总结:pickle与json的区别:

  1、pickle都是以bytes类型读和写,不适用于跨平台所以用的较少,通常只在python内部使用

   2、json以str类型读和写,在很多方面都适用,跨平台性强,但是在python中也有弊端,只能识别部分类型。

四、os模块

import os
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.environ 获取系统环境变量 os.path系列
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小 优先掌握
print(os.path.dirname(r'D:\mypython\projects\基础练习\a3.log'))#拿到文件夹名
print(os.path.basename(r'D:\mypython\projects\基础练习\a3.log'))#拿到文件名
print(os.path.exists(r"D:/mypython/projects/基础练习/01 序列化.py"))#判断路径是否存在,返回Ture,只判断路径是否存在不区分文件还是文件夹。
print(os.path.isfile(r"D:/mypython/projects/基础练习/01 序列化.py"))#判断文件是否存在,返回Ture
print(os.path.join('C:\\','a','b','a.txt')) #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
print(os.path.join('C:\\','a','b','D:\\','a.txt')) #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略,拼接成路径
print(os.path.getsize(r'D:\mypython\projects\基础练习\boss.log')) #单位是字节

2018-08-1316:28:27

json模块、os模块的更多相关文章

  1. 07 json与os模块(进阶)

    json和os模块 阶段一 .数据交换 1.json的基本介绍 JSON全名是JavaScript Object Notation(即:JavaScript对象标记)它是JavaScript的子集. ...

  2. Python进阶(九)----json模块, pickle模块, os模块,sys模块,hashlib模块

    Python进阶----json模块, pickle模块, os模块,sys模块,hashlib模块 一丶序列化模块 什么是序列化: ​ 将一种数据结构,转换成一个特殊的序列(特殊字符串,用于网络传输 ...

  3. json模块 os模块 文件加密

    目录 一:random随机模块 二:os模块 三:文件处理选择任意视频 四:sys模块 五:实现文件执行加密操作 六:json 序列化模块 七:json序列化 反序列化 八:json 文件写读方式 九 ...

  4. day 20 collection模块 time 模块 os 模块

    一.collection模块 1.namedtuple: 生成可以使用名字来访问元素内容的tuple 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象 3.Counter: 计数器,主要 ...

  5. python常用模块: random模块, time模块, sys模块, os模块, 序列化模块

    一. random模块  import random # 任意小数 print(random.random()) # 0到1的任意小数 print(random.uniform(-10, 10)) # ...

  6. day13 函数模块之序列化 random 模块 os模块 sys模块 hashlib模块 collections模块

    json import json dic = {'k1':'v1','k2':'v2','k3':'v3'} str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串 ...

  7. 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)

    认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...

  8. random模块 os模块

    # random# import random# random.random() # 大于0且小于1之间的小数# random.randint() # 大于等于1且小于等于3之间的整数# random ...

  9. Python学习第十二课——json&pickle&XML模块&OS模块

    json模块 import json dic={'name':'hanhan'} i=8 s='hello' l=[11,22] data=json.dumps(dic) #json.dumps() ...

  10. python time模块 sys模块 collections模块 random模块 os模块 序列化 datetime模块

    一 collections模块 collections模块在内置的数据类型,比如:int.str.list.dict等基础之上额外提供了几种数据类型. 参考博客 http://www.pythoner ...

随机推荐

  1. visual studio code配置项

    // 通过将设置放入设置文件中来覆盖设置. { //-------- 编辑器配置 -------- // 控制字体系列. "editor.fontFamily": "Co ...

  2. 改写python round()函数,解决四舍五入问题 round(1.365,2)=1.36

    round()函数四舍五入存在一个问题,遇到5不一定进一.如下图所示: print(round(1.365,2)) #1.36 没进一 print('%.2f'%1.365) print(round( ...

  3. 读REDIS数据结构

    一.DICT 主要有两个问题: 1.散列冲突,解决办法是拉链法 typedef struct dictEntry { void *key; union { void *val; uint64_t u6 ...

  4. MySQL:数据库入门篇4

    1. 视图 创建视图 create view 视图名字 as 查询sql语句; drop view 视图名字; alter view 视图名字 as 查询sql语句; 2. 触发器 1. 插入事件触发 ...

  5. BZOJ4066:简单题(K-D Tree)

    Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作:   命令 参数限制 内容 1 x y A 1<=x,y<=N,A是正整数 ...

  6. WIN7系统 64位出现 Net Framework 数据提供程序要求 Microsoft Data Access Components(MDAC).

    WIN7系统 64位出现  Net Framework 数据提供程序要求 Microsoft Data Access Components(MDAC).请安装 Microsoft Data Acces ...

  7. CENTOS 6 通过YUM升级GCC到4.7/4.8

    第一阶段:升级到4.7 [root@01314.CN ~]# cd /etc/yum.repos.d [root@01314.CN yum.repos.d]# wget http://people.c ...

  8. html5 ajax Java接口 上传图片

    html5图片上传[文件上传]在网上找了很多资料,主要也就2种 1.from表单提交的方式 <form action="pushUserIcon" method=" ...

  9. 【题解】洛谷P1731 [NOI1999] 生日蛋糕(搜索+剪枝)

    洛谷P1731:https://www.luogu.org/problemnew/show/P1731 思路 三重剪枝 当前表面积+下一层表面积如果超过最优值就退出 当前体积+下一层体积如果超过总体积 ...

  10. PAT1064. Complete Binary Search Tree

    1064. Complete Binary Search Tree 题目大意 给定一个序列, 求其 生成Complete BST 的层序遍历. 思路 最开始把这个题想复杂了, 还想着建立结构体, 其实 ...