一、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. ORACLE查询删除重复记录三种方法

    本文列举了3种删除重复记录的方法,分别是rowid.group by和distinct,小伙伴们可以参考一下.   比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完 ...

  2. 记录项目代码迁移后,UI测试框架的搭建(配置文件的修改、测试脚本试运行)

    前文:记录一次项目代码迁移过程 上文代码迁移的目的就是为了新增vue脚手架自带的UI测试框架,工具有了,就需要实践运行在项目中了(修改配置文件.编写测试脚本等). 一.单元测试 测试框架 karma ...

  3. SVN cleanup 反复失败解决办法

    svn cleanup cleaning up 操作反复失败,svn提示的问题是版本需要更新,更新成最新的版本之后,依旧反复失败,陷入死循环.还好找一个blog上的方法试了一下,成功了. 先说故障环境 ...

  4. NO.006-2018.02.11《卜算子·我住长江头》宋代:李之仪

    卜算子·我住长江头_古诗文网(bǔ) 卜算子·我住长江头 宋代:李之仪 我住长江头,君住长江尾.日日思君不见君,共饮长江水. 我居住在长江上游,你居住在长江下游. 天天想念你却见不到你,共同喝着长江的 ...

  5. 【转载】#457 Converting Between enums and their Underlying Type

    When you declare an enum, by default each enumerated value is represented internally with an int. (S ...

  6. linux自动备份文件 并上传到远程服务器 脚本实现

    (1)在服务器上创建备份目录,并赋予权限       mkdir -p /backup/bakdata  #新建数据备份目录(2)完成备份脚本操作新建脚本文件      vi bakdata.sh添加 ...

  7. c#隐藏tabcontrol选项卡

    隐藏:Tab1.TabPage2.Parent = null;显示:Tab1.TabPage2.Parent =Tab1;tab1为tab控件名,TabPage2为选项卡名.

  8. CentOS 7.1上安装.Net Core

    官方网站给出了几条命令: sudo yum install libunwind libicu curl -sSL -o dotnet.tar.gz https://go.microsoft.com/f ...

  9. AngularJS 使用 uppercase 过滤器的表格

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  10. 将某页面中ajax中获取到的信息放置到sessionStorage中保存,并在其他页面调用这些数据。

    A页面代码: var obj = data.data; var infostr = JSON.stringify(obj);//转换json sessionStorage.obj = infostr; ...