博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常用模块,异常处理
阅读量:4608 次
发布时间:2019-06-09

本文共 10982 字,大约阅读时间需要 36 分钟。

---恢复内容开始---

os模块

跟操作系统相关

import os# os.makedirs('dirname1/dirname2')#生成多层递归目录# os.removedirs('dirname1')#若目录为空,则删除,查找上级目录,如果为空也删除,递归删除# os.mkdir('dirname')#生成单级目录,不能生成多级# os.rmdir('dirname1')#删除单级空目录,如果目录不为空报错无法删除# os.listdir('dirname')#列出指定目录下的所有文件极其子目录,包括隐藏文件,以列表的形式打印# os.remove('dirname/1.py')#删除指定文件# os.rename('old','new')#重命名文件或者目录# os.stat('path/filename')#获取文件/目录的信息## os.system('dir')#运行shell命令,直接显示# os.popen('bash command').read()#运行shell命令,获取执行结果# os.getcwd()#获取当前工作目录# os.chdir('dirname')#改变当前脚本工作目录,相当与cd## # os.path# os.path.abspath('day1')#返回path规范化的绝对路径# os.path.split('D:\python\python113天\作业\day11')#将path分割成目录和文件名按元组返回# os.path.dirname('D:\python\python113天\作业\day11')#返回path的目录名,就是os.path.split()返回元组的第一项# os.path.basename('D:\python\python113天\作业\day11')#返回path的文件名,就是os.path.split()返回元组的第二项# os.path.exists('path')#如果path存在,返回True;否则返回false# os.path.isabs('path')#判断path是否是绝对路径# os.path.isfile('path')#判断path是否是一个存在的文件# os.path.isdir('path')#判断path是否是一个存在的目录# os.path.join('c:','D:','kapu','jcc')#将多个路径组合后返回,第一个绝对路径前的参数将被忽略# os.path.getatime('path')#返回path所指向的文件或者目录的最后访问时间# os.path.getmtime('path')#返回path指向的文件或者目录的最后修改时间# os.path.getsize('path')#返回path的大小# os.sep#输出操作系统特定的路径分隔符# os.linesep #输出当前平台使用的终止符# os.pathsep #输出分割文件路径的字符串# os.name #输出字符串显示当前使用平台,win->nt  linux->posix
View Code

sys模块

和python解释器交互

import sys# sys.platform#返回操作系统平台的名称# sys.version #获取python解释器的版本信息# sys.exit()#退出系统,正常退出exit(0),非正常退出exit(1)# sys.path#返回模块搜索路径# sys.argv#

序列化相关模块

序列化:数据类型-->字符串

反序列化:字符串-->数据类型
什么是序列?字符串
应用情况:数据存储,网络传输

序列化的三种方法

1.json

优点: 通用的序列化格式

缺点:只有很少一部分类型能够通过json转化成字符串

# 序列化过程 dumps(直接在内存中操作)  dump(对文件中的内容进行操作)import json# dumpsdic = {1:'a'}str_dic = json.dumps(dic)print(str_dic)#{"1": "a"}# dumpwith open('d:\jcc.txt','w',encoding='utf-8') as f:    json.dump(dic,f)#把dic字典序列化后写入jcc.txt文件中# 反序列过程 loads(直接在内存中操作)load(对文件中的内容进行操作)# loadsdic_d = json.loads(str_dic)print(dic_d)#{'1': 'a'}# loadwith open('d:\jcc.txt',encoding='utf-8') as f:    str  = json.load(f)print(str)# json只能序列化列表和字典
View Code

2.pickle

优点:所有的python中的数据类型都可以转化成字符串

序列化的内容只有python能理解,且部分反序列化依赖代码
可以分步load和dump
序列化之后的内容是bytes类型

3.shelve

序列化句柄

使用句柄直接操作,非常方便

python3中独有的方法

import shelve# 序列化f = shelve.open('shelve_file')f['key'] = {
'int':1,'float':9.2}f.close()# 反序列化f = shelve.open('shelve_file')she = f['key']f.close()print(she)

hashlib模块

import hashlibres = hashlib.md5()res.update(b'jcc')   #必须转成bytes类型print(res.hexdigest())res2 = hashlib.sha1()res2.update(b'jcc')print(res2.hexdigest())res3 = hashlib.sha3_224()res3.update(b'jcc')print(res3.hexdigest())
加密

给密码加盐

res = hashlib.md5(bytes('salt',encoding='utf-8'))res.update(b'jcc')   #必须转成bytes类型print(res.hexdigest())#动态加盐  给盐动态的加一些字符res = hashlib.md5(bytes('salt',encoding='utf-8')+b'123')res.update(b'jcc')print(res.hexdigest())
加盐

分次加密

import hashlibres = hashlib.md5()res.update(b'j')   #必须转成bytes类型res.update(b'cc')print(res.hexdigest())
分批加密

configparse模块

配置文件模块

可以包含多个节section,每个节可以有多个参数(键=值)

用python生成一个配置文件

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) #创建一个example.ini配置文件
生成一个配置文件

查找文件内容

import configparserconfig = configparser.ConfigParser()查找节点print(config.sections())        #  []config.read('example.ini')print(config.sections())        #   ['bitbucket.org', 'topsecret.server.com']判断节点是否在文件中print('bytebong.com' in config) #     Falseprint('bitbucket.org' in config) # True# 查找某个节中的键值print(config['bitbucket.org']["user"])  #     hgprint(config['DEFAULT']['Compression']) #yesprint(config['topsecret.server.com']['ForwardX11'])  #no查看某个节print(config['bitbucket.org'])          #
for key in config['bitbucket.org']: # 注意,有default会默认default的键 print(key)print(config.options('bitbucket.org')) # 同for循环,找到'bitbucket.org'下所有键print(config.items('bitbucket.org')) #找到'bitbucket.org'下所有键值对print(config.get('bitbucket.org','compression')) # yes get方法Section下的key对应的value
文件内容查找

增删改操作

import configparserconfig = configparser.ConfigParser()config.read('example.ini',encoding='utf-8')config.add_section('yuan')  #新增一个sectionconfig.remove_section('bitbucket.org') #删除一个节config.remove_option('topsecret.server.com',"forwardx11") #删除某个节中的某个属性config.set('topsecret.server.com','k1','11111') #修改属性config.set('yuan','k2','22222')config.write(open('new2.ini', "w")) #写入文件,任何改动必须提交才能生效
增删改

 

异常处理

处理可预测且无法避免的错误

try:    ret = int(input('>>>'))    print(ret)except ValueError as e:   #发生异常时执行以下代码    print('input number',e)else:    #没有异常执行以下代码    print('-------')finally:   #无论异常是否出现,都执行的代码    print('完成') except支持多分支万能异常 Exception:可以捕捉所有异常尽可能的单独处理异常,万能异常写在最后

主动触发一个异常

try:    raise TypeError('类型异常')except TypeError as e:    print(e)

自定义一个异常

class EvaException(BaseException):    def __init__(self,msg):        self.msg=msg    def __str__(self):        return self.msgtry:    raise EvaException('类型错误')except EvaException as e:    print(e)

常用异常

# AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x# IOError 输入/输出异常;基本上是无法打开文件# ImportError 无法引入模块或包;基本上是路径问题或名称错误# IndentationError 语法错误(的子类) ;代码没有正确对齐# IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]# KeyError 试图访问字典里不存在的键# KeyboardInterrupt Ctrl+C被按下# NameError 使用一个还未被赋予对象的变量# SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)# TypeError 传入对象类型与要求的不符合# UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,# 导致你以为正在访问它# ValueError 传入一个调用者不期望的值,即使值的类型是正确的
View Code

堆栈实现的一个三级菜单

menu = {    '北京': {        '海淀': {            '五道口': {                'soho': {},                '网易': {},                'google': {}            },            '中关村': {                '爱奇艺': {},                '汽车之家': {},                'youku': {},            },            '上地': {                '百度': {},            },        },        '昌平': {            '沙河': {                '老男孩': {},                '北航': {},            },            '天通苑': {},            '回龙观': {},        },        '朝阳': {},        '东城': {},    },    '上海': {        '闵行': {            "人民广场": {                '炸鸡店': {}            }        },        '闸北': {            '火车战': {                '携程': {}            }        },        '浦东': {},    },    '山东': {},}# 堆栈实现三级菜单li = [menu]while li:    for i in li[-1]:print(i)    k = input('>>>')    if k in li[-1].keys() and li[-1][k]:li.append(li[-1][k])    elif k=='b':li.pop()    elif k=='q':break
View Code

 

---恢复内容结束---

os模块

跟操作系统相关

import os# os.makedirs('dirname1/dirname2')#生成多层递归目录# os.removedirs('dirname1')#若目录为空,则删除,查找上级目录,如果为空也删除,递归删除# os.mkdir('dirname')#生成单级目录,不能生成多级# os.rmdir('dirname1')#删除单级空目录,如果目录不为空报错无法删除# os.listdir('dirname')#列出指定目录下的所有文件极其子目录,包括隐藏文件,以列表的形式打印# os.remove('dirname/1.py')#删除指定文件# os.rename('old','new')#重命名文件或者目录# os.stat('path/filename')#获取文件/目录的信息## os.system('dir')#运行shell命令,直接显示# os.popen('bash command').read()#运行shell命令,获取执行结果# os.getcwd()#获取当前工作目录# os.chdir('dirname')#改变当前脚本工作目录,相当与cd## # os.path# os.path.abspath('day1')#返回path规范化的绝对路径# os.path.split('D:\python\python113天\作业\day11')#将path分割成目录和文件名按元组返回# os.path.dirname('D:\python\python113天\作业\day11')#返回path的目录名,就是os.path.split()返回元组的第一项# os.path.basename('D:\python\python113天\作业\day11')#返回path的文件名,就是os.path.split()返回元组的第二项# os.path.exists('path')#如果path存在,返回True;否则返回false# os.path.isabs('path')#判断path是否是绝对路径# os.path.isfile('path')#判断path是否是一个存在的文件# os.path.isdir('path')#判断path是否是一个存在的目录# os.path.join('c:','D:','kapu','jcc')#将多个路径组合后返回,第一个绝对路径前的参数将被忽略# os.path.getatime('path')#返回path所指向的文件或者目录的最后访问时间# os.path.getmtime('path')#返回path指向的文件或者目录的最后修改时间# os.path.getsize('path')#返回path的大小# os.sep#输出操作系统特定的路径分隔符# os.linesep #输出当前平台使用的终止符# os.pathsep #输出分割文件路径的字符串# os.name #输出字符串显示当前使用平台,win->nt  linux->posix
View Code

sys模块

和python解释器交互

import sys# sys.platform#返回操作系统平台的名称# sys.version #获取python解释器的版本信息# sys.exit()#退出系统,正常退出exit(0),非正常退出exit(1)# sys.path#返回模块搜索路径# sys.argv#

序列化相关模块

序列化:数据类型-->字符串

反序列化:字符串-->数据类型
什么是序列?字符串
应用情况:数据存储,网络传输

序列化的三种方法

1.json

优点: 通用的序列化格式

缺点:只有很少一部分类型能够通过json转化成字符串

# 序列化过程 dumps(直接在内存中操作)  dump(对文件中的内容进行操作)import json# dumpsdic = {1:'a'}str_dic = json.dumps(dic)print(str_dic)#{"1": "a"}# dumpwith open('d:\jcc.txt','w',encoding='utf-8') as f:    json.dump(dic,f)#把dic字典序列化后写入jcc.txt文件中# 反序列过程 loads(直接在内存中操作)load(对文件中的内容进行操作)# loadsdic_d = json.loads(str_dic)print(dic_d)#{'1': 'a'}# loadwith open('d:\jcc.txt',encoding='utf-8') as f:    str  = json.load(f)print(str)# json只能序列化列表和字典
View Code

2.pickle

优点:所有的python中的数据类型都可以转化成字符串

序列化的内容只有python能理解,且部分反序列化依赖代码
可以分步load和dump
序列化之后的内容是bytes类型

3.shelve

序列化句柄

使用句柄直接操作,非常方便

python3中独有的方法

import shelve# 序列化f = shelve.open('shelve_file')f['key'] = {
'int':1,'float':9.2}f.close()# 反序列化f = shelve.open('shelve_file')she = f['key']f.close()print(she)

异常处理

处理可预测且无法避免的错误

try:    ret = int(input('>>>'))    print(ret)except ValueError as e:   #发生异常时执行以下代码    print('input number',e)else:    #没有异常执行以下代码    print('-------')finally:   #无论异常是否出现,都执行的代码    print('完成') except支持多分支万能异常 Exception:可以捕捉所有异常尽可能的单独处理异常,万能异常写在最后

主动触发一个异常

try:    raise TypeError('类型异常')except TypeError as e:    print(e)

自定义一个异常

class EvaException(BaseException):    def __init__(self,msg):        self.msg=msg    def __str__(self):        return self.msgtry:    raise EvaException('类型错误')except EvaException as e:    print(e)

常用异常

# AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x# IOError 输入/输出异常;基本上是无法打开文件# ImportError 无法引入模块或包;基本上是路径问题或名称错误# IndentationError 语法错误(的子类) ;代码没有正确对齐# IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]# KeyError 试图访问字典里不存在的键# KeyboardInterrupt Ctrl+C被按下# NameError 使用一个还未被赋予对象的变量# SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)# TypeError 传入对象类型与要求的不符合# UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,# 导致你以为正在访问它# ValueError 传入一个调用者不期望的值,即使值的类型是正确的
View Code

堆栈实现的一个三级菜单

menu = {    '北京': {        '海淀': {            '五道口': {                'soho': {},                '网易': {},                'google': {}            },            '中关村': {                '爱奇艺': {},                '汽车之家': {},                'youku': {},            },            '上地': {                '百度': {},            },        },        '昌平': {            '沙河': {                '老男孩': {},                '北航': {},            },            '天通苑': {},            '回龙观': {},        },        '朝阳': {},        '东城': {},    },    '上海': {        '闵行': {            "人民广场": {                '炸鸡店': {}            }        },        '闸北': {            '火车战': {                '携程': {}            }        },        '浦东': {},    },    '山东': {},}# 堆栈实现三级菜单li = [menu]while li:    for i in li[-1]:print(i)    k = input('>>>')    if k in li[-1].keys() and li[-1][k]:li.append(li[-1][k])    elif k=='b':li.pop()    elif k=='q':break
View Code

 

转载于:https://www.cnblogs.com/jiangchengcheng/p/9587968.html

你可能感兴趣的文章
重新想象 Windows 8 Store Apps (71) - 其它: C# 调用 C++
查看>>
发布mvc遇到的HTTP错误 403.14-Forbidden解决办法
查看>>
记录一些好用的工具
查看>>
超链接样式设置(去下划线)(转)
查看>>
2016012003+陈琦+散列函数的应用及其安全性
查看>>
Android 状态栏通知Notification、NotificationManager详解
查看>>
UIApplicationDelegate协议
查看>>
Jmeter测试dubbo接口填坑
查看>>
[zz]GDB调试精粹及使用实例
查看>>
数据库的创建和删除
查看>>
最简单的三层实例【插入据
查看>>
设计模式学习笔记——Prototype原型模式
查看>>
pom.xml里有红叉报错的解决办法
查看>>
Perl last和next的用法区别
查看>>
Selenium 管理 Cookies
查看>>
exceptionfunction[LeetCode]Permutations
查看>>
Linux(2)_常用命令2
查看>>
自定义分页
查看>>
[转]DELPHI——调试(1)
查看>>
JS秒数转成分秒时间格式
查看>>