---恢复内容开始---
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
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只能序列化列表和字典
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 传入一个调用者不期望的值,即使值的类型是正确的
堆栈实现的一个三级菜单
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
---恢复内容结束---
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
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只能序列化列表和字典
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 传入一个调用者不期望的值,即使值的类型是正确的
堆栈实现的一个三级菜单
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