Python-11-Python文件和异常
11-1 文件的读取
1. open()函数
open(file, mode='r', buffering=1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
(1) 参数说明:
file: 必须,文件路径(相对或绝对路径)
mode: 可选,文件打开模式
encoding: 一般使用utf-8
buffering: 设置缓冲
errors: 报错级别
newline:分区换行符
closefd: 传入的file参数类型
mode 常用参数:
r: 以只读方式打开文件
w: 只写方式,若文件不存在创建文件,若文件已存在则覆盖原文件。
a: 打开一个文件追加写入,若文件已存在则在最末尾处追加,若文件不存在,则新建文件进行写入。
更多mode参数见:http://www.runoob.com/python/file-methods.html //Python菜鸟教程 TODO
(2) 文件读取格式
with open('file_path', mode='r', encoding='utf-8') as f: data = f.read() #返回整个文件数据 data1 = f.readline() #返回一行数据 data2 = f.readlines() #以列表格式返回整个文件数据
(4) 文件写入格式
with open(file='file_path', mode='w', encoding='utf-8') as f file.write(str) #字符串写入文件 file.writelines(sequence) #向文件写入一个序列字符串列表,需要需要换行则需要自己加上换行符
2. Pycharm实验
在工程中文件名上右键,Copy Path可以获取文件的绝对路径。
f = open('file name', mode='r', encoding='utf-8') data = f.read() print(data) f.close() #必须要调用这个函数 with open('file name', mode='r', encoding='utf-8') as f: #以文本记的方式打开,不需要显示的调用close() data = f.read() print(data) with open('file name', mode='r', encoding='utf-8') as f: data = f.readline() #默认返回首行 data1 = f.readlines() prnt(data1[0]) #打印第一行
使用相对路径 files 目录和 main.py 在同一目录下,所以:with open('files/文本.txt', mode='r', encoding='utf-8') as f:
这里文件读取也是有位置指针的概念。
11-2 文件的写入
1. 覆盖写入
with open('files/n1.txt', mode='w', encoding='utf-8') as f: f.write('hello lemon\nhello world') f.writelines(['hello pycharm\n', 'hello apple\n', 'hello'])
2. 追加写入
with open('files/n1.txt', mode='a', encoding='utf-8') as f: #f.write('hello lemon\nhello world') f.writelines(['hello pycharm\n', 'hello apple\n', 'hello\n'])
11-3 JSON与文件读写
1. JSON(JavaScript Object Notation)特点
JSON是一种轻量级的数据交换格式,易于阅读和编写。具有通用性,支持就所有语音。支持跨平台,支持Windows,Linux,Mac平台。
2. 常用JSON函数
json.dumps: 将Python对象编码成JSON字符串
json.loads: 将已编码的JSON字符串解码为Python对象
json.dump: 将JSON字符串数据写进文件
json.load: 读取JSON文件里面的数据
Python:{'python':1, 'Java':2, 'Hadoop':3}
JSON: '{"python":1, "Java":2, "Hadoop":3}'
3. Python 与 JSON 类型转换
----------------------- Python JSON ----------------------- dict object list,tuple array str string int,float number True true False false None null -----------------------
4. 例子
#将Python对象编码成JSON字符串 import json p_list = [ {'lemon':True, 'apple':6}, {'pear':6, 'banana':False}, ] p_dict = {'python':1, 'Java':2, 'Hadoop':None} json_list = json.dumps(p_list) json_dict = json.dumps(p_dict) print(json_list) #[{"lemon": true, "apple": 6}, {"pear": 6, "banana": false}] print(json_dict) #{"python": 1, "Java": 2, "Hadoop": null} pass #也在pycharm中这里打个断点,然后鼠标点在代码上看 #将已编码的JSON字符串解码为Python对象 list1 = json.loads(json_list) dict1 = json.loads(json_dict) print(list1) #[{'lemon': True, 'apple': 6}, {'pear': 6, 'banana': False}] print(dict1) #{'python': 1, 'Java': 2, 'Hadoop': None} #JSON文件读写 import json def f2(): p_dict = '{"python":1, "java":2, "Hadoop":null, "lemon":true, "banana":false}' #注意格式和python中的字典不同 #写入 with open("files/n2.jaon", 'w', encoding='utf-8') as f: json.dump(p_dict, f) #此时n2.json文件中的内容:"{\"python\":1, \"java\":2, \"Hadoop\":null, \"lemon\":true, \"banana\":false}" #读取 with open("files/n2.jaon", 'r', encoding='utf-8') as f: data = json.load(f) #返回json字符串格式 data1 = json.loads(data) #将json字符串格式转化为python对象格式,注意传参是data print(data) #{"python":1, "java":2, "Hadoop":null, "lemon":true, "banana":false} json字符串格式 print(data1) #{'python': 1, 'java': 2, 'Hadoop': None, 'lemon': True, 'banana': False} 已经转换成python对象格式 f2()
11-4 try-except-finally捕捉异常
1. 什么是异常异常即是一个事件,该事件会在程序执行过程中发生,影响了晨程序的正常执行。一般情况下,Python无法正常处理程序时就会发生一个异常。异常就是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
2. 捕获异常的基本格式
try: 语句一 #检测语句一是否存在错误 excep 异常名称: 语句二 #若语句一存在错误,这里可以捕获错误 finally: 语句三 #无论是否存在错误,都会执行finally内代码
3. 常见异常
BaseException: 所有异常错误
Exception: 常规异常错误
ZeroDivisionError: 除0异常错误
ValueError: 值类型异常错误
更多异常见:https://www.runoob.com/python/python-exceptions.html
4. 例子
def f(num): try: 5 / num except ZeroDivisionError as e: #将报错信息传递给变量e print(e) finally: print('执行结束') f(1) #执行结束 f(0) ---------------- division by zero 执行结束 ======================= def f(num): try: return int(num) except ValueError as e: print(e) finally: print('执行结束') f(1) ---------------------- 执行结束 1 f('a') #没办法将字符串转换为数字 ---------------------- invalid literal for int() with base 10: 'a' 执行结束
还可以同步捕获多个异常:
def f(num): try: return 8/int(num) except ZeroDivisionError as e: print(e) except ValueError as e: print(e) finally: print('执行结束') f(0) #division by zero f('a') #invalid literal for int() with base 10: 'a' #下面这样写也行 def f(num): try: return 8/int(num) except (ZeroDivisionError,ValueError) as e: #写在一行 print(e) finally: print('执行结束')
捕获所有异常,推荐使用这种方法:
def f(num): try: return 8/int(num) except BaseException as e: #这个的报错信息和上面是一样的 print(e) finally: print('执行结束') f(0) #division by zero f('a') #invalid literal for int() with base 10: 'a'
11-5 raise 与 assert
1. 除了可以使用 try-except-finally 格式来捕获异常外,还可以通过 raise 显示地引发异常,一旦引发raise后面的异常,程序将终止运行。
例子:
#需求1:传入一个参数,若不是int类型抛出异常终止程序 #需求2:判断小于5则抛出异常终止程序 def f2(num): if not isinstance(num, int): #判断变量是否是指定类型 raise Exception('参数不是一个int类型') if num < 5: raise Exception('参数小于5') f2('a') #Exception: 参数不是一个int类型 f2(1) #没有执行到 #需求2: 若参数个数小于5抛出异常终止程序 def f2(*args): if len(args)<5: raise Exception('参数个数小于5') f2(1,2,3,4) #Exception: 参数个数小于5
2. raise断言
assert的异常参数,其实就是在断言表达式后添加的字符串信息,用来解释断言并更好地知道哪里出了问题。基本格式如下:
assert expression [, arguements] #条件不成立抛出异常
例子:
def f2(num): assert isinstance(num, int),'参数不是一个int类型' assert num>=5,'参数小于5' f2(1) #AssertionError: 参数小于5 条件为假时报错
参考:
Python 文件I/O: https://www.runoob.com/python/python-files-io.html
posted on 2023-08-01 15:55 Hello-World3 阅读(63) 评论(0) 编辑 收藏 举报