模块(sys/os/序列化模块)
sys 模块:
sys.path 返回模块的搜索路径,初始化时使用pythonpath环境变量的值
sys.modules 返回所有在当前这个python程序中导入的模块的
sys.exit 退出程序
sys.argv 返回一个列表 列表的第一个元素是执行这个文件的时候,写在python后面的第一个值, 之后的元素是在执行python的启动的时候可以写多个值.都会依次添加到列表中
os 模块:和操作系统进行交互的
工作目录相关:
os.getcwd() 在那执行文件就获取当前文件地址
例:
import osprint(os.getcwd()) ==>F:\面向对象\180808
os.chdir(新地址) 修改当前文件目录,相当于 shell下cd
例:
import osprint(os.getcwd())os.chdir(r"F:\面向对象\180807")print(os.getcwd())结果:F:\面向对象\180808F:\面向对象\180807
os.curdir 返回当前目录 结果: .
os.pardir 获取当前目录的父级目录字符串名 结果: ..
创建文件/文件夹和删除文件/文件夹相关:
os.makedirs(文件名1/文件名2) 可生成多层递归目录
os.removedirs(文件1/文件2) 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,一次类推
os.mkdir(文件名) 生成单级目录 ,相当于shell中mkdir dirname
os.rmdir(文件名) 删除单级目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir(文件名) 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove(文件名) 删除文件
os.rename(oldname,newname) 重命名文件名
和操作系统差异相关:
os.stat(路径) 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符, win下为"\\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符, win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串, win下为";",Linux下为":"
os.name 输出字符串指示当前使用平台, win下为"nt",Linux下为"posix"
使用pyth来和操作系统命令交互:
os.system("base command") 运行shell命令,直接显示
os.popen("base command").read() 运行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.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[,path3[,...]]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
例:获取文件的路径
import osprint(__file__)print(os.path.dirname(__file__))print(os.path.dirname(os.path.dirname(__file__)))结果:F:/面向对象/180808/课堂练习.pyF:/面向对象/180808F:/面向对象
序列化模块:json pickle shelve
序列化:将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化.
序列化的目的:1.把内容写入文件;2.网络传输数据
json模块:
json. dumps(dict) 将字典转化成字符串
例:
import jsondic = {"a":1,"b":2,"c":3}str_dic = json.dumps(dic)print(str_dic,type(str_dic)) ==>{"a": 1, "b": 2, "c": 3} <class 'str'>
json.loads(str) 将字符串转化成字典
例:
import jsonstr_dic = '{"a": 1, "b": 2, "c": 3}'dic = json.loads(str_dic)print(dic,type(dic)) ==>{'a': 1, 'b': 2, 'c': 3} <class 'dict'>
json.dump(dict) 将字典写成字符串写入文件
例:
import jsondic = {"a":1,"b":2,"c":3}with open("json_dumps",mode="w",encoding="utf-8")as f: json.dump(dic,f)
json.load(句柄) 从文件中读取并转化成字符串
例:
import jsonwith open("json_dumps",mode="r",encoding="utf-8")as f: print(json.load(f)) ==>{'a': 1, 'b': 2, 'c': 3}
json能处理的数据类型有限,限制比较多
限制:
1.json格式中字典的key必须是字符串数据类型
2.如果是数字为key,那么dump之后会强转成字符串数据类型
3.对元组做value的字典会把元组强制转换成列表
4.json不支持元组做key会报错
5.json处理文件中的字符串必须是双引号
6.能多次dump数据到文件中但不能load出来 多次写入数据到文件中用dumps从文件中读出数据用loads
7.json中集合不能使用dump/dumps方法
8.json中dumps元组类型会将元组强转成列表再转化成字符串
例: 中文格式的写入文件中的编码ensure_ascii
import jsondic = {"abc":1,"country":'中国'}ret = json.dumps(dic,ensure_ascii=False)print(ret) ==>{"abc": 1, "country": "中国"}
sort_keys对字典的key的首字母做排序
indent设置缩进
separators根据标点符号来换行
ensure_ascii 显示中文
例:
import jsondic = {"name":'小白','age':'18','hobby':["听歌",'画画']}ret = json.dumps(dic,sort_keys=True,indent=4,separators=(",",":"),ensure_ascii=False)print(ret)结果:{ "age":"18", "hobby":[ "听歌", "画画" ], "name":"小白"}
json的其他参数是为了用户看着更方便,但是会相对浪费时间
pickle模块: 与文件相关模式:rb,wb
pickle支持几乎所有的对象的序列化
pickle.dumps的结果是bytes类型
例:
import pickledic = {1:(2,3,4),('a','b'):4}pic_dic = pickle.dumps(dic)print(pic_dic) ==>b'\x80\x03}q\x00(K\x01K\x02K\x03K\x04\x87q\x01X\x01\x00\x00\x00aq\x02X\x01\x00\x00\x00bq\x03\x86q\x04K\x04u.' #bytes类型new_dic = pickle.loads(pic_dic)print(new_dic) ==>{1: (2, 3, 4), ('a', 'b'): 4}
一个类的对象也可用pickle.dumps存储起来
例:
import pickleclass Student: def __init__(self,name,age): self.name = name self.age = ageone_person = Student("小白",18)ret = pickle.dumps(one_person)print(ret)new_person = pickle.loads(ret)print(new_person.name) ==>小白print(new_person.age) ==>18
例:写入文件
import pickleclass Student: def __init__(self,name,age): self.name = name self.age = ageone_person = Student("小白",18)with open("pickle_demo","wb")as f: pickle.dump(one_person,f)with open("pickle_demo","rb")as f1: ret = pickle.load(f1) print(ret.name,ret.age) ==>小白 18
pickle支持几乎所有对象序列化 对象的序列化需要这个对象对应的类在内存中
例:对于多次dump/load的操作做了良好的处理
import picklewith open("pickle_demo","wb")as f: pickle.dump({"k1":"v1"},f) pickle.dump({"k2":"v2"},f) pickle.dump({"k3":"v3"},f) with open("pickle_demo","rb")as f1: while True: try: print(pickle.load(f1)) except EOFError: break结果:{'k1': 'v1'}{'k2': 'v2'}{'k3': 'v3'}
shelve模块:
对于shelve模块如果写定一个文件并且改动比较少,读文件的操作比较多,且大部分读取都需要基于某个key来获得对应的value才用shelve
例:
import shelvef = shelve.open("text")f["key"] = {"k1":(1,2,3),"k2":"v2"}f.close()f = shelve.open("text")content = f["key"]f.close()print(content) ==>{'k1': (1, 2, 3), 'k2': 'v2'}
hashlib模块:
定义:能把一个字符串数据类型的变量转换成一个定长的密文的字符串,字符串里的每一个字符都是一个十六进制的数字 且字符串到密文不可逆
对于相同的字符串用相同的算法相同的手段去进行摘要获得的值总是相同的
md5和sha1都是算法它们两个相互独立.
对于同一个字符串不管这个字符串有多长,只要是相同,无论在任何环境下,多少次执行在任何语言中使用相同的算法相同手段得到的结果永远是相同的;反之,只要不是相同的字符串,得到的结果一定不同
md5 32位字符,每个字符都是十六进制
sha1 40位字符,每个字符都是十六进制
例: md5
import hashlibs = "abcd"md5_obj = hashlib.md5()md5_obj.update(s.encode("utf-8"))ret = md5_obj.hexdigest()print(ret,len(ret),type(ret)) ==>e2fc714c4727ee9395f324cd2e7f331f 32 <class 'str'>
例: sha1
import hashlibs = "abcd"sha1_obj = hashlib.sha1()sha1_obj.update(s.encode("utf-8"))ret = sha1_obj.hexdigest()print(ret,len(ret),type(ret)) ==>81fe8bfe87576c3ecb22426f8e57847382917acf 40 <class 'str'>
md5比sha1快效率高
md5算法相对简单,比较普及 sha1算法相对复杂,计算速度也慢但是安全性更高,因为用的人少.
为了避免撞库问题我们需要对密码进行动态加盐
例:
import hashlibusername = input(">>>>>")password = input(">>>>>")md5_obj = hashlib.md5(username.encode("utf-8"))md5_obj.update(password.encode("utf-8"))ret = md5_obj.hexdigest()print(ret) 结果:>>>>>你好>>>>>12336473306e94d8d0f8dc4af5d4d9e17cc
例: 文件是否一致的校验
import hashlibmd5_obj = hashlib.md5()with open("hashlib_demo1","rb")as f: md5_obj.update(f.read()) ret = md5_obj.hexdigest() print(ret) md5_obj = hashlib.md5()with open("hashlib_demo2","rb")as f: md5_obj.update(f.read()) ret1 = md5_obj.hexdigest() print(ret1)if ret == ret1: print("True")else: print("False")
configparser模块:
定义:有一种固定格式的配置文件.有一个对应的模块去帮你做这个文件的字符串处理
配置文件后缀.ini
生成配置文件格式:
例:
import configparserconfig = configparser.ConfigParser()config["DEFAULT"] = {'ServerAliveInterval': '45', 'Compression': 'yes', 'CompressionLevel': '9', 'ForwardX11':'yes' }config['bitbucket.org'] = {'User':'hg'}config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'}with open('example.ini', 'w') as configfile: config.write(configfile)结果:
[DEFAULT] #sectionserveraliveinterval = 45 #optioncompression = yes #optioncompressionlevel = 9 #optionforwardx11 = yes #option [bitbucket.org] #sectionuser = hg #option [topsecret.server.com] #setionhost port = 50022 #optionforwardx11 = no #option
logging模块:
功能:
1.日志格式的规范
2.操作的简化
3.日志的分级管理
logging不能做的事:不能自动生成要打印的内容
需要自己在开发的时候定好,哪些地方需要打印,打印的内容是什么,内容的级别
logging模块的使用方法:
1.普通配置形, 简单的,可定制化差
2.对象配置,复杂的,可定制化强
例:
import logginglogging.basicConfig(level=logging.DEBUG) #不写level默认答应警告以上的所有内容logging.debug("debug message") #调试logging.info("info message") #基础信息logging.warning("warning message")#警告logging.error("error message") #错误logging.critical("critical message") #严重错误结果:DEBUG:root:debug messageINFO:root:info messageWARNING:root:warning messageERROR:root:error messageCRITICAL:root:critical message
例:
import logginglogging.basicConfig(level=logging.DEBUG, format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt="%a,%d %b %Y %H:%M:%S", filename="logging_demo")logging.debug("debug message") #调试logging.info("info message") #基础信息logging.warning("warning message")#警告logging.error("error message") #错误logging.critical("critical message") #严重错误
在屏幕上输出不用打印filename
写入文件要在baicconfig中写入文件名
basicconfig不能将一个logging信息即输出到屏幕上又输入到文件中
例: 将一个logging信息即输出到屏幕上又输入到文件中
import logginglogger = logging.getLogger()fh = logging.FileHandler('test.log',encoding='utf-8') # 创建一个handler,用于写入日志文件ch = logging.StreamHandler() # 再创建一个handler,用于输出到控制台formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') #创建一个日志输出格式logger.setLevel(logging.DEBUG) #设置输出内容级别fh.setFormatter(formatter) #文件管理操作符绑定一个格式 ch.setFormatter(formatter) #屏幕管理操作符绑定一个格式logger.addHandler(fh) #logger对象可以添加多个fh和ch对象logger.addHandler(ch)logger.debug('logger debug message')logger.info('logger info message')logger.warning('logger warning message')logger.error('logger error message')logger.critical('logger critical message')
转载于:https://www.cnblogs.com/wangjian941118/p/9476056.html
模块(sys/os/序列化模块)相关推荐
- 模块sys, os, glob, pickle, subprocess常见用法
参考python常用标准库 http://blog.51cto.com/lizhenliang/1872538 一. sys 1. sys.argv 脚本名1.py, 命令行中执行python 1.p ...
- python 多级递归_Python文件目录和系统操作,os模块和os.path模块
os模块 # 输出平台名称,windows是"nt",Unix是"posix". 1. os.name # 路径分隔符,如windows的'',linux的'/ ...
- devi into python 笔记(五)异常 文件操作 sys os glob模块简单实用
异常: Java异常: try catch块处理异常,throw引发异常. Python异常: try except块处理异常,raise引发异常. 异常如果不主动处理,则会交给Python中的缺省处 ...
- 一文看懂Python(四)-----os.path模块篇
一.前言 今天介绍一下Python中一个常用的模块–os.path模块.之后会很频繁地用到这个模块,故在分享一下! 二.常用方法解释 方法名 方法介绍 basename(path) 去掉目录路径,单独 ...
- python怎么导入数学模块_python怎么导入模块
python中的模块即.py文件,模块的导入方式通常有两种:1是直接使用import语句导入:2是使用from..import..结构引入. 使用 import 导入模块的语法,但实际上 import ...
- sys模块 和os模块
sys模块 sys.argv 命令行参数list,第一个元素是程序员本事路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取python解释程序的版本信息 s ...
- python sys模块讲解_python模块之sys模块和序列化模块(实例讲解)
sys模块 sys模块是与python解释器交互的一个接口 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys. ...
- python中模块sys与os的一些常用方法
sys模块提供了访问或操作与python解释器相关方法与对象. 我们就列举出常用到的知识,以后,随着学习,不断补充. 几个常用到的动态对象: sys.argv,这是一个列表,它包含了所有传递给脚本的命 ...
- python常见模块命令(os/sys/platform)
python常见模块命令(os/sys/platform) 一.Os Python的标准库中的os模块主要涉及普遍的操作系统功能.可以在Linux和Windows下运行,与平台无关. os.sep 可 ...
最新文章
- Visual Studio UML Use Case Diagram(1)
- 安卓模拟器BlueStacks 安装使用教程(图解)
- PHP的单引号双引号
- Laravel 用户认证与登陆
- 助力产教融合,阿里云教育一体机发布
- SAP ABAP实用技巧介绍系列之将unicode字符转换成中文
- datatables 增、删、查、改
- dubbo源码解析(一)
- 注水、占坑、瞎掰:起底机器学习学术圈的那些“伪科学”
- 数据库中多对多的关系设计
- 思科网络安全解决方案
- H3C交换机常用命令大全
- 北京爷们儿跟北京妞儿 倍儿靠谱儿-----女人篇
- python 爬取链家北京租房信息
- 大数据有哪些基本特征?
- JavaWeb:掌握Session的使用,完善用户登录注册案例的功能
- uniapp 打包app后,选择文件上传时,编辑上传文件
- echarts饼状图中间显示数值加上名字
- SpringBoot基于websocket的网页聊天
- python语言创意绘画-校招资讯|拼多多、百度、中建六局等名企校园招聘
热门文章
- BERT、MT-DNN、GPT2.0、ERNIE
- Hdoj 1847.Good Luck in CET-4 Everybody! 题解
- iOS中如何监测来电
- JMS--Queue实战
- 转:巧用搜狗输入法输入英文单词
- Sublime Text 3插件之Emmet:HTML/CSS代码快速编写神器
- 我的学习开发环境,呵呵!
- iphone以旧换新活动_iPhone第3轮降价背后:销售下滑库克甩锅给中国,国产手机崛起分食蛋糕...
- 5c用计算机怎么打,再一次谈谈%5c暴库的利用 -电脑资料
- json php 数组读写_PHP如何将数据写入JSON?