day16 常用模块 sys os json pickle
知识点
os:和操作系统相关sys:和解释器相关
json:和操作JSON(一种数据交换格式)相关pickle:序列化
hashlib:加密算法Collections:集合类型
os:操作系统接口
此模块提供了灵活的和操作系统相关的函数. os.remove(file_path) :删除文件os.rmdir(dir_path) :删除空文件夹
删除非空文件夹使用另一个模块:shutil
shutil.rmtree(path) os.removedirs(name) :递归删除空文件夹
os.rename(src, dst) :文件,目录重命名,目标不能事先存在.
举例:
使用shutil模块删除非空目录.
和路径相关的属性,更多相关的操作被封装在os.path这个模块中.
os.curdir :当前路径os.sep :路径分隔符os.altsep :备用的分隔符os.extsep :扩展名分隔符os.pathsep :路径分隔符
os.linesep :行分隔符,不要在写文件的时候,使用这个属性.
举例:
os.path模块
此模块实现了一些在路径操作上的方法.
获取功能
os.path.abspath(path) :返回一个路径的绝对路径.
如果参数路径是相对的路径,就把当前路径和参数路径的组合字符串当成结果返回. 如果参数路径已经是绝对路径,就直接把参数返回.
如果参数路径以/开始,则把当前盘符和参数路径连接起来组成字符串返回.
注意:
此方法只是简单的将一个拼接好的字符串返回,并不会去检查这个字符串表示的文件是否存在. 样例:
os.path.split(path) :返回一个元组,第二个元素表示的是最后一部分的内容,第一个元素表示的是剩余的内容.
如果只是一个盘符或者是以路径分隔符结尾的字符串,则第二个元素为空. 否则第二个元素就是最后一部分的内容.
如果path中不包含路径分隔符,则第一个元素为空.
样例:
os.path.basename(path) :返回path指定的路径的最后一个内容. 如果只是一个盘符,或者是以路径分隔符结尾的字符串,则返回空; 否则返回的是路径中的最后一部分内容.
样例:
os.path.dirname(path) :返回一个路径中的父目录部分.
如果只是一个盘符,或者是以路径分隔符结尾的字符串,则整体返回. 否则返回的是路径中的父目录部分.
样例:
os.path.getsize(path) :获取文件的字节数.如果是文件夹,返回0或者是一个不准确的值.
样例:
os.path.join(path,*paths) :连接若干个路径为一个路径.
如果路径中有绝对路径,则在这个路径之前的路径都会被丢弃,而从这个路径开始往后拼接. Windows中盘符一定要带\,否则不认为是一个盘符.
样例:
判断功能
os.path.exists(path) :判断路径是否真正存在. os.path.isabs(path) :判断是否是绝对路径os.path.isfile(path) :判断是否是文件os.path.isdir(path) :判断是否是目录
sys:和解释器相关
提供了解释器使用和维护的变量和函数.
sys.argv :当以脚本方式执行程序时,从命令行获取参数.
argv[0]表示的是当前正在执行的脚本名.argv[1]表示第一个参数,以此类推.
样例:
有脚本test.py 内容如下:
使用命令行方式运行该脚本: python test.py hello world
sys.getrefcount(object) :返回一个对象的引用的次数.总比真实引用的次数多1.
样例:
sys.getrecursionlimit() :递归的最大次数
sys.setrecursionlimit(limit) :设置递归的最大次数.
样例:
sys.modules :返回系统已经加载的模块,以字典形式返回.
对这个字典中的值进行修改并没有什么具体意义.反而有时会引发异常. 常用来作为是否重新加载一个模块的判断依据.
sys.path :系统寻找模块的路径.可以通过PYTHONPATH来进行初始化.
由于是在程序执行的时候进行初始化的,所以,路径的第一项path[0]始终是调用解释器的脚本所在的路径.如果 是动态调用的脚本,或者是从标准输入读取到脚本命令,则path[0]是一个空字符串.程序中可以随时对这个路径 进行修改.以达到动态添加模块路径的目的.
json模块
JSON:JavaScript Object Notation ,JS对象标记.
原本是在JavaScript中对对象标记的一种方式,现在已经变成被大多数语言广泛应用的一种数据交换格式. JSON格式的数据本身就是一个字符串,JSON文件就是一个文本文件.
它把其他数据格式统统转换成字符串,进而可以保存在文件中或者是通过网络进行传输.另一方面,从JSON文件中读取 或者是网络接收端很容易将得到的字符串还原成原来的数据格式.
通过字符串这种非常通用的格式,完成了多种数据格式的交换.
序列化和反序列化
将不同数据类型转换成json字符串的过程称为序列化,反之称为反序列化. 并不是所有类型的数据都能被序列化成json字符串的.
以下是Python中的可以被序列化的数据类型:
从上表中可以看出,Python中的set , frozenset 等数据类型,就没有办法转换成json字符串. Python中提供的json模块就是专门用来操作JSON格式的文件的.
json模块中的方法
将其他数据类型序列化成json字符串将json字符串反序列化成其他数据类型
json字符串在进行反序列化时,也遵循一定的对应关系:
从上图可以看出,json中的array类型转换成的都是Python中的list.这也就意味着,元组经过json序列化和反序列 化之后,将会变成列表.
将其他数据类型序列化成json字符串并写入文件
从文件中读取json字符串并反序列化成其他数据类型
需要注意的是:
不要尝试多次将json字符串写入同一个文件.
或者手动修改已经写入json字符串的文件.都容易导致反序列化失败.
通常json文件用来保存一些配置信息,这样的配置信息不会太大.通过一次写,一次读,完全可以满足数据交换的需求.
pickle:序列化
pickle是Python中提供的另一种序列化的模块.
但是pickle和json有着多方面的不同:
json更加通用,pickle更有针对性.
pickle模块中的方法
pickle模块中的方法基本和json模块中的方法一样.只是适用的数据类型范围比json更广泛.
将其他数据类型序列化成字节将字节反序列化成其他数据类型
将其他数据类型序列化成字节并写入文件
从文件中读取字节并反序列化成其他数据类型
样例:
hashlib:加密模块
hashlib模块中提供的类采用的是单向加密算法,也称'哈希算法','摘要算法'.
这种算法的特点是:
相同的数据切分成若干个小的部分,对这些小部分分别加密和一次性对整个数据加密的结果是一致的. 原始数据的一点小不同,将会导致最终结果的非常大的差异.
从加密后的结果反推原始数据几乎是不可能的.
使用摘要算法加密一个数据的三大步骤: 获取一个加密算法对象.
调用加密对象的update方法给指定的数据加密.
调用加密对象的digest或者是hexdigest获取加密后的结果.
样例:
简化写法
加密对象的update方法可以调用多次,意味着在在前一次的update结果之上,再次进行加密.如果只是一次更新的话, 还可以直接把数据当成参数传递给构造方法.
例如:
和下面的语句是等价的:
这种在创建加密对象的时候,就指定初始化的数据,称为salt (盐).
目的就是为了让加密的结果更加复杂.
其他加密对象
加密对象除了md5之外,还有如下几种:
这些加密对象之间的区别就是加密算法结果的长度不同.加密结果的长度越长,算法越复杂,相应的,加密耗费的时间 也越长.
例如:
练习
把用户名和密码信息加密后,通过序列化的方式存储到本地文件中. 并通过控制台输入信息进行验证.
Collections:集合
此模块定义了一些内置容器类数据类型之外,可用的集合类数据类型. 往往针对的是特殊的应用场景.
namedtuple:元组的工厂函数
所谓的工厂函数指的是:接收类名和一些创建此类对象所需要的一些参数,返回指定类的一个对象.
命名元组的特点是给元素绑定了一个有意义的名字.在使用元素时可以使用元素的名字而不必使用索引. 函数的签名是:
此函数的返回值是一个tuple的子类定义.常用的是前两个参数.
第一个参数指定的是返回的子类的类名.
第二个参数指定的是子类元组可以拥有的元素名.以字符串组成的列表表示,或者是以空格,逗号分隔的单个字符串都 可以.
例如:
使用namedtuple 创建一个名为: Rectangle 的tuple 子类. 并用Rectangle 创建一个实例对象,使用其中的元素.
defaultdict:默认字典
defaultdict 是内置的dict 的子类. 回顾dict 的创建方式:
defaultdict 类的构造函数签名:
和dict 的构造函数相比,只是在前面添加了一个参数: default_factory ,其余的参数和dict 一样.
第一个参数指定的是一个函数名,用来表示当字典对象中出现了不存在的键时,对应的值初始值是如何计算. 正因为这个函数是获取值的,所以,对这个函数规定:不能有参数.
默认情况下,第一个参数是None,意味着不存在的键对应的值为None.
注意:
一旦使用defaultdict 时,指定了不存在的键,则会引发两件事情: 调用第一个参数指定的函数得到默认值.
把返回值赋值给这个新键.
如图所示:
例如:
从结果中可以看出, defaultdict 新增了不存在键和默认值组成的键值对. 自定义函数充当第一个参数:
Counter:生成统计信息
用于统计可哈希对象的数量.
是dict的子类.一种特殊的字典.
它的键是可哈希对象,值是这个对象的个数统计信息.个数可以是手动指定的,也可以是自动计算出来的,并且可以是 负数和0.
创建Counter对象.
查看计数器的统计结果,和使用字典的方式相同:
|
1 2 |
from collections import Counter c = Counter('abcab') |
|||
|
3 |
print(c) |
# |
Counter({'a': 2, 'b': 2, 'c': |
1}) |
|
4 |
print(c['a']) |
# |
2 |
|
|
5 |
print(c['b']) |
# |
2 |
|
|
6 |
print(c['name']) |
# |
0 |
|
Counter常用方法:
most_common([n]) :显示数量最多的前几名.
例如:
day16 常用模块 sys os json pickle的更多相关文章
- 常用模块(random,os,json,pickle,shelve)
常用模块(random,os,json,pickle,shelve) random import random print(random.random()) # 0-1之间的小数 print(rand ...
- Python常用模块sys,os,time,random功能与用法,新手备学。
这篇文章主要介绍了Python常用模块sys,os,time,random功能与用法,结合实例形式分析了Python模块sys,os,time,random功能.原理.相关模块函数.使用技巧与操作注意 ...
- 常用模块 time sys os json pickle
# import time # print(time.time()) #秒数 # print('开始下载') # time.sleep(2) # print('下载完成') # print(time. ...
- 模块sys, os, glob, pickle, subprocess常见用法
参考python常用标准库 http://blog.51cto.com/lizhenliang/1872538 一. sys 1. sys.argv 脚本名1.py, 命令行中执行python 1 ...
- python 模块二(os,json,pickle)
#################################总结##################### os常用 os.makedirs('baby/安哥拉/特斯拉/黄晓明') os.mkd ...
- Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解
把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...
- 常用模块之 os,json,shelve,xml模块
os 即操作系统 在 os 中提供了很多关于文件,文件夹,路径处理的函数 这是我们学习的重点 os.path 是os模块下专门用于处理路径相关的 python是一门跨平台语言,由于每个平台路径规则不同 ...
- 常用模块:os模块,logging模块等
一 os模块 那么作为一个常用模块,os模块是与操作系统交互的一个模块. 那么os模块中我们常用的一般有以下几种: os.listdir('dirname') 以列表的形式列出指定目录下的所有文 ...
- Python(正则 Time datatime os sys random json pickle模块)
正则表达式: import re #导入模块名 p = re.compile(-]代表匹配0至9的任意一个数字, 所以这里的意思是对传进来的字符串进行匹配,如果这个字符串的开头第一个字符是数字,就代表 ...
随机推荐
- 《Effective C++》结语
九月的这三周把<Effective C++>重读了一遍,尽量以自己的理解,用最简单的(其实太深入也不会写)的语言把书里面的重点都写了下来. 由于之前找实习占用了大量的时间,写的博客都比较水 ...
- 16.Python input()函数:获取用户输入的字符串
input() 函数用于向用户生成一条提示,然后获取用户输入的内容.由于 input() 函数总会将用户输入的内容放入字符串中,因此用户可以输入任何内容,input() 函数总是返回一个字符串. 例如 ...
- es6字符串的扩展——模板
todo1.模板字符串 传统的 JavaScript 语言,输出模板通常是这样写的(下面使用了 jQuery 的方法). $('#result').append( 'There are <b&g ...
- 14.多线程设计模式 - Master-Worker模式
多线程设计模式 - Master-Worker模式 并发设计模式属于设计优化的一部分,它对于一些常用的多线程结构的总结和抽象.与串行相比并行程序结构通常较为复杂,因此合理的使用并行模式在多线程并发中更 ...
- vue router 如何使用params query传参,以及有什么区别
写在前面: 传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,喜欢的可以点波赞 ...
- DH加密算法
http://blog.csdn.net/zbw18297786698/article/details/53609794
- SSM三大框架整合配置详解
首先,导入框架所需要的全部jar包(此处省略...........) 第一步:先从mybatis框架开始 我们只需要在mybatis的核心配置文件sqlConfigXml里写上这么一段话,代表的是给p ...
- 2019秋Java学期课程总结
眨眼间,Java这门课程就快要到了尾声,这门课程主要学习到 搭建了Java的编译环境,安装eclipse软件,会用Java写一些简单的程序. 主要学习到的知识点有以下几点 1:通过写pta上的作业知道 ...
- 第七周总结&实验报告5
这一周的课程内容比较难,而且比较不容易理解,所有学习的很吃力,现在接触的知识越来越多,也越来越难了,还是要多对照书本来进行学习! 这周主要学的有: 一.抽象类 1.Java中可以创建一种类专门用来当作 ...
- Android共享元素场景切换动画的实现
安卓5.0系统引入了共享元素,能做出非常炫酷的场景切换效果,这让人非常兴奋同时非常蛋疼,因为低版本没法使用啊,所以今天就跟大家分享一下自己写的一个库,其实只有2个文件而已就可以兼容安卓5.0以下的版本 ...