重生归来,我要成功 Python 高手--day14 写入和异常的捕获与python包和模块
文件的写入
wirte 写入
flush 将在内存缓冲区的内容写入到磁盘中
‘w’:覆盖写入,在打开这个文件的时候会把原文件内容全部删除,之后写入新的内容,如果没有这个文件就新创建一个新的文件
写入的内容只能是字符串
如果写入的内容需要换行,需要自己提供换行符
缓冲区写入到硬盘的动作:
1.缓冲区满了,会向磁盘写入,腾出缓冲空间
2.程序调用了flush函数
3.程序关闭或者调用了close()函数
# 文件写入
f=open('test_write.txt','w',encoding='utf-8')
f.write('1111\n')
# f.flush()
f=open('test_write.txt','w',encoding='utf-8')
f.write('1111\n')
f.write('111121\n')
f.write('111121231231\n')
f.flush()
# 练习
"""
生成一万条数据
我的id是1
我的id是2
我的id是3
我的id是4
.。。。
"""
f=open('data.txt','w',encoding='utf-8')
for i in range(1,10001):
f.write(f'我的id是{i}\n')
1
f.close()
文件的追加
在文件的原有基础上进行追加,不存在则创建
这个代码是将一个内容经过筛选复制到另一个文件中的动作
f = open('bill.txt', 'r', encoding='utf-8')
f2 = open('bill.txt.abk', 'w', encoding='utf-8')
for line in f.readlines():
line= line.strip()
line_1=line.split(',')
if line_1[4]=='测试':
continue
else:
f2.write(line+'\n')
f.close()
f2.close()
二级制内容的写入和追加
读取:rb
写入:wb
追加:ab
其中的r,w,a是原本读,写 ,追加的内容后面的b对应这二进制
二级制用来处理音频和视频文件
异常
代码在运算中可能遇到的报错情况,如果遇到了这个情况的后续处理方式
格式:
try:
可能发生错误的代码
except:
如果出现了异常怎么处理
在excerpt后跟指定的内容,就是只处理这种情况的异常,异常处理可以使用别名
def div(a,b):
try:
return a/b
except ZeroDivisionError as e:
print(f"出错了:::{e}")
except TypeError as e:
print(f'出错了:::{e}')
div(10,'abc')
div(10,0)
div(10,1)
捕获所有异常:
try:
代码块
except Exceptions as e:
会捕获所有的异常
# 所有异常
def div(a,b):
try:
return a/b
except Exception as e:
print(f"出异常了看看传入参数是什么::{e}")
div(10,'abc')
div(10,0)
div(10,1)
后续可以添加
else:
内容
表示如果没有异常就返回的内容
Finally:
内容
无论有无异常都要执行的代码
def div(a,b):
result=None
try:
result=a/b
except Exception as e:
print(f"出异常了看看传入参数是什么::{e}")
else:
print('没有异常')
finally:
print("都执行")
return result
print(div(10, 1))
print('-'*40)
print(div(10, 0))
####
结果:
没有异常
都执行
10.0
----------------------------------------
出异常了看看传入参数是什么::division by zero
都执行
None
注意:异常具有传递性,可以通过报错信息来查看传递链
python模块
以.py结尾的python文件。作用:把代码写在别的文件中,方便主程序进行调用
常见的引用方式:
import 模块名(文件名)
from 模块名 import 函数,变量等
from 模块名 import * ---->会引用全部的代码和变量
import 模块名 as 别名
from 模块名 import 函数名 as 别名
# import 模块 import tetx a=11 b=22 c=33 f=tetx.add(a,b,c) print(f) f1=tetx.find_min(a,b,c) print(f1) f2=tetx.find_max(a,b,c) print(f2) # 其余导入方法 # from 模块名 import 类,变量,方法等 from time import sleep from random import randint print(1) sleep(2) print(2) a = randint(1, 10) print(a) # from 模块名 import* from tetx import * f = add(1, 2, 3) print(f) f2 = find_min(2, 3, 66) print(f2) # # import 模块名 as 别名 # # from 模块名 import 方法名 as 别名 import random as suiji from tetx import add as jia a=suiji.randint(1,10) b=suiji.randint(1,10) f=jia(1,2,2) print(a) print(b) print(f)
text.py:
__all__ = ["add", 'find_min']
def add(a, b, c):
return a + b + c
def find_max(a, b, c):
return max(a, b, c)
def find_min(a, b, c):
return min(a, b, c)
print("帅帅嘟")
模块如果同名了:如果导入的功能模块同名了,那么程序使用的就是最后一个模块
通过:__all__:来控制from 模块名 import*使用的是哪些函数
那么在每个模块都有对应的测试代码,程序调用这些测试代码的时候就会把测试使用的变量一并带过来,如何避免这种问题:
这些测试的内容写在 if __name__==__main__:中
其中:__name__是当前操作的模块名称,模块直接运行,他的名字就是__main__
如果模块是调用运行的,那么模块的名称就是他文件的名称,那么就不会运行下面的代码
python包
每个包含__init__这个文件名称的文件,就可以当作是一个包
作用:当模块越来越多不好管理的时候,包可以帮助我们管理这些文件,包的本质依据是模块
包就是模块的集合,模块就是函数的集合



""" 用包里面的模块里面的函数 import 包名.模块名 包名.模块名.目标 """ # 方法一 import my_package.my_module1 my_package.my_module1.my_print1() # 方法二 from 包 import * 需要在init中写入 __all__=[函数名],表示哪些可以被使用 from my_package import * my_module1.my_print1() # 方法三 from 包.模块 import 功能 [ as 别名] from my_package.my_module1 import my_print1 as p from my_package.modeule2 import my_print2 as s p() s()
第三方包的下载:
pip install 包名 -i 镜像地址
更多推荐
所有评论(0)