json模块、os模块
一、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模块的更多相关文章
- 07 json与os模块(进阶)
json和os模块 阶段一 .数据交换 1.json的基本介绍 JSON全名是JavaScript Object Notation(即:JavaScript对象标记)它是JavaScript的子集. ...
- Python进阶(九)----json模块, pickle模块, os模块,sys模块,hashlib模块
Python进阶----json模块, pickle模块, os模块,sys模块,hashlib模块 一丶序列化模块 什么是序列化: 将一种数据结构,转换成一个特殊的序列(特殊字符串,用于网络传输 ...
- json模块 os模块 文件加密
目录 一:random随机模块 二:os模块 三:文件处理选择任意视频 四:sys模块 五:实现文件执行加密操作 六:json 序列化模块 七:json序列化 反序列化 八:json 文件写读方式 九 ...
- day 20 collection模块 time 模块 os 模块
一.collection模块 1.namedtuple: 生成可以使用名字来访问元素内容的tuple 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象 3.Counter: 计数器,主要 ...
- python常用模块: random模块, time模块, sys模块, os模块, 序列化模块
一. random模块 import random # 任意小数 print(random.random()) # 0到1的任意小数 print(random.uniform(-10, 10)) # ...
- day13 函数模块之序列化 random 模块 os模块 sys模块 hashlib模块 collections模块
json import json dic = {'k1':'v1','k2':'v2','k3':'v3'} str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串 ...
- 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)
认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...
- random模块 os模块
# random# import random# random.random() # 大于0且小于1之间的小数# random.randint() # 大于等于1且小于等于3之间的整数# random ...
- Python学习第十二课——json&pickle&XML模块&OS模块
json模块 import json dic={'name':'hanhan'} i=8 s='hello' l=[11,22] data=json.dumps(dic) #json.dumps() ...
- python time模块 sys模块 collections模块 random模块 os模块 序列化 datetime模块
一 collections模块 collections模块在内置的数据类型,比如:int.str.list.dict等基础之上额外提供了几种数据类型. 参考博客 http://www.pythoner ...
随机推荐
- WAKE-WIN10-SOFT-python配置
1,anaconda下载,安装 1,1 官网:https://www.continuum.io/downloads 下载:https://repo.continuum.io/archive/ win1 ...
- Document flow API in SAP CRM and C4C
Document flow API in CRM 以一个具体的例子来说明.在Appointment的Overview page上能看见一个名叫Reference的区域,这里可以维护一些其他的业务文档的 ...
- linux下修改apt下载源
很多时候使用apt install命令会出现Unable to fetch somearchives的错误,我们需要运行以下apt update,可是经常会出现下载速度很慢的情况 这里就记一下将apt ...
- Thread control block & thread
https://en.wikipedia.org/wiki/Thread_control_block Thread Control Block (TCB) is a data structure in ...
- 行云管家 V4.7产品新特性-国际化版本、支持Oracle的数据库审计、主机密码自动修改策略 发布日期:2018-11-22
行云管家在线体验: 行云管家[官网]-领先的云计算管理平台-云安全,堡垒机,自动化运维 行云管家新手有礼活动: 行云管家新手有礼,新用户1元即可体验专业版-优惠券 发布日期:2018-11-22 ...
- ABP问题记录
按照<Asp.NET Core2.0与 EF的ABP框架入门视频教程>(https://ke.qq.com/course/287301)下载了3.9版本的ABP,开始学习,下面记录遇到的问 ...
- doppia代码结构
代码地址:https://bitbucket.org/rodrigob/doppia/src stereo_matching下的几个目录相当于这几篇论文中求stixel的几个步骤 cost_volum ...
- 【转】一看你就懂,超详细java中的ClassLoader详解
http://blog.csdn.net/briblue/article/details/54973413 ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框 ...
- 【题解】UVA11584 Partitioning by Palindromes
UVA11584 https://www.luogu.org/problemnew/show/UVA11584 暑假开始刷lrj紫/蓝书DP题 这几天做的一道 思路 预处理出所有的回文串是否存在 前提 ...
- 数据库优先生成EF CRUD演示
①准备我们的数据库: Northwind ②新建 实体数据模型,由数据库优先创建 ③创建控制器,这里我们只针对了Customers这张表做演示,实际会复杂的多 注:你可以把上面两步合成一步来写,创建控 ...