jiangchengcheng

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

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
# 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:\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
# 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

 

分类:

技术点:

相关文章: