文章目录
大家好,我是技术界的小萌新,今天要和大家分享一些干货。在阅读之前请先点赞👍,给我一点鼓励吧!这对我来说很重要 (*^▽^*)
一、文件知识
1、文件编码
文件编码:编码是一种规则集合,将机器码(二进制码)与自然语言之间进行翻译。
常用文件编码(密码本):UTF-8、GBK、Big5 等。
2、文件的读取操作
文件:操作系统以文件为单位管理磁盘中的数据,文件分类很多,分为文本、图像、视频、音频、可执行文件等。
1) open() 打开文件 (读)
语法:open(file,mode,encoding)
-
file [str]: 要打开文件的目标文件名的字符串[可包含文件的所在的绝对路径、相对路径。
-
mode [str]:设置打开模式,只读 r、写入 w、追加 a等。
-
w 写入:文件存在则覆盖写入,无文件则创建。
-
a 追加:文件存在,写入内容追加到文件末尾,无文件则创建。
-
-
encoding [str]:编码格式 (推荐使用 UTF-8 )。encoding 参数位置并非为第三位,所以使用 “关键字传参”。
2) 读操作相关方法:
- 整个文件读取都是通过移动指针的方式,所以需要特别注意指针在读取中移动时所处的位置。
file.read([size])
: 读取文件 size
字符的内容。size 默认为 -1 ( = None),即读取整个文件内容。
警告:
- 每次读取文件都是从当前指针位置(即上一次的位置)开始读取数据。即读取通过移动指针的方式。
- 在文本文件读取模式,size 的计数是以 Unicode 字符的个数计数的,在二进制文件读取模式下,size 计数是以字节为单位计数。
- 在纯 ASCII 码下,字节数=字符串长度=字符个数,因为每个字符就一个字节。
- 在 Unicode (编码)下,2 字节数=字符串长度=字符个数,因为每个字符都是2个字节。
- UTF-8 下:英文 1 字节,中文 3 字节。
file.readlines()
: 读取文件所有内容,封装到列表中,每一行均为一个元素。读取文件指针后续的所有内容,直到读取到 文件结束符 EOF。会读取到换行符 “\n
” 不会被转义。
file.readline()
: 一次读取一行内容,同上,包括 \n
。
for line in file
: 通过 for 循环简单的读取缓存区中已打开文件的每一行内容。会读入 \n
。
注意:
按行读入均会读取到换行符,一般需要
variable.strip()
默认去除文本(前)后的换行符、空格。
3) 关闭文件
file.close()
: 关闭文件,把缓冲区写入磁盘进行持久化存储,最后解除文件占用,防止持续的 IO流 占用系统内存资源。
4) with open 打开文件
语法:with open() as variable
with open("./text.txt","r",encoding="UTF-8") as file_ins:
for line in f:
print(line)
- 作用:语句结束后,自动关闭文件,防止遗忘。
3、文件的写入操作
1) 写入/追加写入
f.write(‘text’) --> 写入文本到 Python 内存缓冲区 --> f.flust --> 刷新缓冲区内容,写入到磁盘。
f = open('ins.txt','w') # 不指定 encoding ,则默认使用当前系统的 文件编码格式。
# f = open('ins.txt','a') # 追加写入,可写入“\n”换行符来进行换行。
f.write('hello world') # 写入字符,到 ptyhon 内存的缓冲区内。
f.flush() # flush 刷新,缓冲区内容持久化存储写入到硬盘中。
- 直接调用 write ,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区。
- 当调用 flush 的时候,内容会真正写入文件。
- 这样做是避免频繁的操作硬盘,导致效率下降(缓冲区高速读取修改,最后一次性写入磁盘)。
二、异常的处理
1、异常的概念
异常 = “BUG” = “小虫子”,一旦发生异常,Python 解释器就无法继续执行,并进行提示。
2、异常的捕获
为什么需要捕获异常? 为了在力所能及的范围内,对可能出现的 BUG,进行提前准备、提前处理。
这种行为被称之为:异常处理(捕获异常)
程序遇到 BUG 之后的行为:
① 整个程序因为 小BUG 而停止。
② 对 BUG 进行提醒,整个程序继续进行。 --> 进行 “异常捕获” 即可达到该效果。
基本语法:
try:
可能发生的异常
except:
# 排除
如果出现异常执行的代码 # 即补救行为
1) 捕获指定异常
语法:except NameError(异常名称) as variable(把第一个异常赋给此变量,以下均同样):
2) 捕获多个异常
语法:except (NameError, ZeroDivisionError)(多个异常)(as variable):
3) 捕获全部异常
语法:except Exception (as e):
print(“出现了未知的异常”)`
3、异常的 else 和 finally
try:
except: # 有异常执行语句,与 else 互异。
else: # 和 except 互异,无异常执行下列语句。
finally: # 有没有异常都执行下列语句 。
4、异常的传递性
异常具有传递性:如下示例,证明了异常具有传递性,从最底层,一直传递到了顶层。
所以顶层也可以捕获到异常。
def fun1():
1 /0
def fun2():
fun1()
def fun3():
fun2()
fun3()
打印:
Traceback (most recent call last):
File "D:\ASUS\Desktop\Typora\Python 学习笔记\Scripts\test.py", line 7, in <module>
fun3()
File "D:\ASUS\Desktop\Typora\Python 学习笔记\Scripts\test.py", line 6, in fun3
fun2()
File "D:\ASUS\Desktop\Typora\Python 学习笔记\Scripts\test.py", line 4, in fun2
fun1()
File "D:\ASUS\Desktop\Typora\Python 学习笔记\Scripts\test.py", line 2, in fun1
1 /0
~~^~
ZeroDivisionError: division by zero # 除零异常
三、模块
1、模块及导入方法
Python 模块(Module),是一个 Python 文件,以 .py
结尾,模块能定义函数、类和变量,包含可执行代码。
使用:1、导入模块:
[from 模块名]import [模块丨类丨变量丨函数丨*][as 别名]
- 点 在此处代表模块的
层级结构
。
# 使用 from 导入单个函数就不用 “点” 表示层级关系了,* 同理,如下:
# from time import * # 同下。
from time import sleep
sleep(5)
# 模块别名写法:
import time as t
from time import sleep as sl
![image-20240824213741371](https://img-blog.csdnimg.cn/img_convert/c9c9d1dfd469a8f34e86c299af3ca320.png)
常见组合补充: import 包名.模块名.函数名 : 后续调用函数还得写全称,除非 from 消除掉。
from 包名.模块名 import 函数
警告:
- 导入不同名模块,同名变量、函数等,会被后一个模块覆盖。
2、自定义模块
自定义个性模块时,模块名.py
是 import
导入模块时需要的模块名。
1) name 内置变量
__name__
: Python 内置特殊变量,当程序执行时,被赋值为 __main__
,调用其他模块时,会被替换为它的模块名
。
- 所以此处 if 块内容
既可以用于测试
,又不会在模块被其他程序导入时执行测试语句
。
# 自定义模块 my_module.py
def test(a,b):
c = a+b
return c
if __name__ == '__main__': # 内置变量,运行程序时,被赋值为 __main__。
v = test(1,2) # 测试内容,想导入模块时不被执行,则需要使用 __main__。
print(v)
print(__name__)
2) all 内置变量
__all__
:数据类型 --> 列表。
所有
from xxx import *
中的*
会应用__all__
列表中的对象。
- __all__ = [“sleep”, “test”, “randint”] 只有定义 __all__ 列表时
*
的导入行为才会被它控制。- 也可控制 Python 软件包导入的 模块 行为,在
__init__.py
中 定义__all__
列表即可。
3、自定义 Python 包
![image-20240824221854622](https://img-blog.csdnimg.cn/img_convert/559c49ad95e9bd068ea59ab01209f5d6.png)
Python 包为模块的文件夹,包含 一堆模块 + __init__.py 文件。–> Package 包
导入 Python 软件包模块:import my_package.module_1
、from my_package import module_1
、
from my_package.module_1 import *(或具体功能)
。
使用模块函数:my_package.module_1.test()
、module_1.test()
、test()
。
# __init__.py
__all__ = ['module_1', 'module_2', 'module_3'] # 只允许导入软件包内的 这 3 个模块
4、pip 安装第三方 python 包
![image-20240824223118060](https://img-blog.csdnimg.cn/img_convert/9a6248eeb1bff4e8404d08bc5699e3f9.png)
pip 使用语法:pip install python软件包名
设置中也可以管理下载、卸载 第三方库
pip 默认从国外地址下载,加速方法:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 第三方库名
- -i 指定网址,pycharm 设置中也可以 选中 options 参数输入:-i 指定网址 进行网络加速。
5、自定义模块,异常捕获综合讲解视频
[第一阶段-第九章-08-异常-模块-包-综合案例讲解_哔哩哔哩_bilibili
文章到这里就结束了,希望我的分享能为你的技术之旅增添一抹亮色。如果你喜欢这篇文章,请点赞收藏支持我,给予我前行的动力!🚀