zoukankan      html  css  js  c++  java
  • 常用模块,异常处理

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

    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:pythonpython113天作业day11')#将path分割成目录和文件名按元组返回
    # os.path.dirname('D:pythonpython113天作业day11')#返回path的目录名,就是os.path.split()返回元组的第一项
    # os.path.basename('D:pythonpython113天作业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
    # dumps
    dic = {1:'a'}
    str_dic = json.dumps(dic)
    print(str_dic)#{"1": "a"}
    
    # dump
    with open('d:jcc.txt','w',encoding='utf-8') as f:
        json.dump(dic,f)#把dic字典序列化后写入jcc.txt文件中
    
    # 反序列过程 loads(直接在内存中操作)load(对文件中的内容进行操作)
    # loads
    dic_d = json.loads(str_dic)
    print(dic_d)#{'1': 'a'}
    # load
    with 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 hashlib
    res = 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 hashlib
    res = hashlib.md5()
    res.update(b'j')   #必须转成bytes类型
    res.update(b'cc')
    print(res.hexdigest())
    分批加密

    configparse模块

    配置文件模块

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

    用python生成一个配置文件

    import configparser
    config = 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 configparser
    config = configparser.ConfigParser()
    查找节点
    print(config.sections())        #  []
    config.read('example.ini')
    print(config.sections())        #   ['bitbucket.org', 'topsecret.server.com']
    判断节点是否在文件中
    print('bytebong.com' in config) #     False
    print('bitbucket.org' in config) # True
    # 查找某个节中的键值
    print(config['bitbucket.org']["user"])  #     hg
    print(config['DEFAULT']['Compression']) #yes
    print(config['topsecret.server.com']['ForwardX11'])  #no
    查看某个节
    print(config['bitbucket.org'])          #<Section: 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 configparser
    config = configparser.ConfigParser()
    config.read('example.ini',encoding='utf-8')
    config.add_section('yuan')  #新增一个section
    config.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.msg
    try:
        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:pythonpython113天作业day11')#将path分割成目录和文件名按元组返回
    # os.path.dirname('D:pythonpython113天作业day11')#返回path的目录名,就是os.path.split()返回元组的第一项
    # os.path.basename('D:pythonpython113天作业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
    # dumps
    dic = {1:'a'}
    str_dic = json.dumps(dic)
    print(str_dic)#{"1": "a"}
    
    # dump
    with open('d:jcc.txt','w',encoding='utf-8') as f:
        json.dump(dic,f)#把dic字典序列化后写入jcc.txt文件中
    
    # 反序列过程 loads(直接在内存中操作)load(对文件中的内容进行操作)
    # loads
    dic_d = json.loads(str_dic)
    print(dic_d)#{'1': 'a'}
    # load
    with 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.msg
    try:
        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
  • 相关阅读:
    路由器只要能连接上,就能得到密码,
    jmeter上传文件搞了一天,才搞定,没高人帮忙效率就是低,赶紧记下来,以备后用
    1关0不关
    AJAX学习
    建表原则
    设计模式——代理模式
    jdk动态代理机制
    ArrayList源码分析
    Java集合类:HashMap (基于JDK1.8)
    SpringMVC的数据转换、格式化和数据校验
  • 原文地址:https://www.cnblogs.com/jiangchengcheng/p/9587968.html
Copyright © 2011-2022 走看看