一、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. MongoDB数据库 备份 还原

    MongoDB数据库 1.备份用        mongodump 2.还原用        mongorestore 1.备份 @echo offecho 正在备份MongoDB数据库SET mon ...

  2. March 17 2017 Week 11 Friday

    Simplicity is the ultimate sophistication. 简约才是精巧到了极致. Recently I have spent a great number of time ...

  3. Android开发最佳学习路线图(转)

    Android开发总体路线图:  基础学习——JavaSE:        很多朋友一上手就开始学习Android,似乎太着急了一些. Android应用程序开发是以Java语言为基础的,所以没有扎实 ...

  4. selenium + python(鼠标操作)

    关于最近学习selenium自动化测试鼠标操作的一些总结 常见的鼠标操作

  5. python入门2 python字符串换行显示、字符串太长\连接多行

    #coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 缩进 换行 """ &qu ...

  6. git 解决冲突方法

    转载:http://www.cnlvzi.com/index.php/Index/article/id/119 当共享一个项目后提交冲突时 git push -f 强制推送本地的替换服务端 git f ...

  7. 【BZOJ4766】文艺计算姬(prufer序列)

    点此看题面 大致题意: 让你求一个两边各有\(n\)和\(m\)个点的完全二分图有多少个生成树. \(prufer\)序列 这是一道比较经典的利用\(prufer\)序列结论求解答案的计数题. 大致思 ...

  8. caffe卷积层实现

    下图是jiayangqing在知乎上的回答,其实过程就是把image转换成矩阵,然后进行矩阵运算 卷积的实现在conv_layer层,conv_layer层继承了base_conv_layer层,ba ...

  9. mac 上安装lua

    mac 安装lua google了好个看起来都不怎么好操作,这个是在命令行下操作的很简单. http://www.lua.org/download.html curl -R -O http://www ...

  10. 运lucky

    运 [问题背景] zhx 和妹子们玩数数游戏. [问题描述] 仅包含 4 或7 的数被称为幸运数. 一个序列的子序列被定义为从序列中删去若干个数, 剩下的数组成的新序列. 两个子序列被定义为不同的当且 ...