目录
open()函数:open(file, mode='r',encoding=None) --> 打开文件
一、关于异常
介绍:当Python无法正常处理程序时就会发生一个异常,会影响程序的正常执行。
异常也是Python对象,表示一个错误。
捕获:当Python脚本有发生异常的可能时,就需要捕获异常,避免程序终止执行。
语法:try:: 正常程序执行此块代码;except:: 抛出错误执行此代码块
例:1.将以下代码进行异常捕获 2.当代码异常时,将ipt赋值为1
ipt = input("请输入:")
ipt = float(ipt)
print(ipt)
异常类型捕获:但是仅仅使用以上异常捕获,虽然不会报错终止程序。但是无法记录下具体异常种类。如需记录下具体异常种类,则需要捕获该具体异常。
语法:
try:
pass
except 当前异常对象 as e: # e = 当前异常对象
print(e)
例:捕获以下代码的异常类型并输出
li = [1, 2, 3]
li[3] # IndexError
try:
li = [1, 2, 3]
li[3] # IndexError
except IndexError as e:
print(e) # list index out of range
notice:该捕获方式仅能捕获IndexError这一类异常。那么实际上,这种细分的异常种类有很多,可以通过其共同父类Exception捕获输出。
try:
# li = [1,2,3]
# li[3]
int('a')
except Exception as e:
print(e) # invalid literal for int() with base 10: 'a'
try-except-else:如果抛出异常执行except内部代码;如果程序正常执行else内部代码
try-finally:不管程序有无发生异常,都将执行finally内部代码。
主动触发异常:在实际开发中,在程序不满足某条件时,通常会主动抛出异常。
语法:raise Exception()
例:判断煎饼熟了没,当烹饪时间小于5时,则主动触发没熟异常;否则熟了。
def test(level):
if level<5:
raise Exception("没熟没熟")
try:
test(5)
except Exception as e:
print(e)
else:
print("熟了 请吃")
自定义异常
当需要自定义满足一些规则时,就可以自定义异常。
自定义异常通过创建一个新的异常类,自定义名字与内容,并且需要继承Exception类实现。
例:自定义QianAnError异常类
class QianAnError(Exception):
def __init__(self,msg):
self.message = msg
def __str__(self):
return self.message
# e = OldQianAnError("自定义异常")
# print(e)
try:
raise OldQianAnError("自定义异常")
except OldQianAnError as e:
print(e)
断言:assert断言用于判断一个表达式,当表达式条件为False时触发断言异常AssertionError。
语法:assert 断言
notice:断言用于强制用户服从,可捕获,但是一般不捕获。
二、模块
模块是一个包含所有你定义的函数和变量的文件,其扩展名为.py。模块可以被其它程序引入,以使用 该模块中的函数等功能。这也是使用python标准库的方法。
1.导入模块的方式:
- import module_name
- from module_name import name1,name2..
- from module_name import *
- from module_name import func as demo_func
2,常用内置模块
sys 模块:是与python解释器交互模块
常用方法:sys.argv[] --> 是从程序外部获取参数的桥梁-->[]
- 其中sys.argv[0]-->程序本身文件路径
- sys.argv[1]-->外部运行时传递的参数
sys.version --> 用来显示解释器版本信息
sys.path --> 用来显示模块搜索路径
sys.exit() -->用来退出程序
OS模块:是与操作系统相关的模块
常用方法:
os.getcwd() --> 用来打印当前工作目录
os.chdir() --> 改变当前工作目录
os.makedirs() --> 以递归方式创建多个文件夹
os.removedirs() --> 以递归方式删除多个空文件夹
os.mkdir() --> 创建单个文件夹
os.rmdir() --> 删除单个空文件夹
os.path.exists() --> 判断该路径下的文件或文件夹是否存在
os.path.join() --> 拼接路径
time模块:是与时间相关的模块
常用方法:
time.sleep() --> 延迟执行时间
time.time() --> 秒时间戳
time.localtime() --> 本地时间
time.strftime() --> 接收以时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。
datetime也是与时间相关的模块
datetime.datetime.now() --> 输出当前时间
random模块:是随机模块
常用方法:
random.random() --> 随机生成[0,1)的数
random.randint() --> 随机生成整数[]
random.choice() --> 随机在序列取元素
random.shuffle() --> 打乱传入的容器内部顺序并返回
random.sample() --> 随机取样
random.randrange() --> 随机取整数[)
Json模块:JSON是一种使用广泛的轻量数据格式. Python标准库中的json模块提供了JSON数据的处理功能。 由于JSON与python中的字典格式非常像。所以python中的json模块也相当于是用来使json与字典做转换。但是要注意的是,json中的数据必须使用双引号包裹。
常用方法:
json.loads() --> json转为字典(适用于语句)
json.dumps() --> 字典转为json(适用于语句)
json.load() --> json转为字典(适用于文件)
json.dump() --> 字典转为json(适用于文件)
三、包
为了组织好模块,会将多个模块分为包。Python 处理包也是相当方便的。简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件。
导入包的方法:
- from 包名 import 模块名
- from 包名 import * ——> 模块名.方法名()访问 ,用__all__暴露接口
- import 包名 ——>用包名.模块名.方法名()访问,需要import . import demo,demo1
四、文件读写操作
open()函数:open(file, mode='r',encoding=None) --> 打开文件
- file --> 文件路径
- mode --> 操作文件模式:r-只读模式;w-写入;a-追加
- encoding --> 指定文件编码:
utf-8 --> 当文件中文乱码时,则指定编码为utf-8解决。
只读模式r:
- f.readable() --> 判断是否可读,返回值为布尔
- f.read(n) --> 读取全部,在python3中n为字符
- f.readline() --> 逐行读取,包括\n
- f.readlines() --> 读取所有,返回值为列表,包括\n
- f.tell() --> 文件指针所处文件位置
例:新建Students.txt
通过f.readlines()读取文件全部内容
去掉\n换行符
f = open('Students.txt','r')
res = f.readlines()
for i in range(len(res)):
res[i] = res[i].rstrip("\n")
print(res)
f.close() # 关闭文件
notice:
f = open('test02.txt','w')
# f.write("Hello World")
f.write("Logic Education") # 覆盖
f.close()
- r模式,当文件不存在时则报错
- f.read() --> 读取全部
- f.readline() -->逐行读取
- f.readlines() -->读取全部,且为列表
- 读取不可逆
只写模式w:
- f.writable() --> 判断是否可写
- f.write(str) --> 写入内容,返回值为写入字符串的长度
- f.writelines(seq) --> 写入多行,但需要自己添加换行符
notice:
- w模式,当文件不存在时
创建test02.txt文件,并且写入内容
创建文件 - 再次写入为覆盖
例:创建test02.txt文件,并且写入内容
f = open('test02.txt','w')
# f.write("Hello World")
f.write("Logic Education") # 覆盖
f.close()
Python操作json文件:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
格式:'{"key":"value"}'
例:将{"age":18}写入data.json文件中
import json
data = {"name":"qianan"} # python对象 字典
f = open('data.json','w')
json.dump(data,f) # 将python对象转为json对象 写入f文件
例:读取data.json文件中的数据
import json
f = open('data.json','r')
j_data = json.load(f) # 将json对象转为python对象(字典)
f.close()
要注意的是,当文件打开之后,必须通过f.close()语句来关闭文件,释放资源。
try:
f = open('test2.txt','r')
f.read()
finally:
if f:
f.close()
with open() --> 上下文管理器
with关键字用于Python的上下文管理器机制。为了防止诸如open这一类文件打开方法在操作过程出现异常或错误,或者最后忘了执行close方法,文件非正常关闭等可能导致文件泄露、破坏的问题 。Python提供了with这个上下文管理器机制,保证文件会被正常关闭。在它的管理下,不需要再写close语句。其余操作都同open()一致。
with open('Students.txt','r') as f:
print(f.readlines())