Python | 文件、异常模块与包

打印 上一主题 下一主题

主题 696|帖子 696|积分 2088

1.文件

1.1 文件编码

编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。

  • 计算机常用编码:

    • UTF-8
    • GBK
    • Big5

UTF-8是目前全球通用的编码格式
除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可。
1.2 文件的读取操作

一般,文件可以分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别。

  • 文件操作包括打开、关闭、读、写
1.2.1 文件的操作步骤


  • 打开文件
  • 读写文件
  • 关闭文件
    可以只打开和关闭文件,不进行任何读写
1.2.2 open()打开函数

使用open()函数,可以打开一个已经存在的文件,或者创建一个新文件。
1.2.2.1 语法

open(name,mode,encoding)
  1. name: 是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
  2. mode: 设置打开文件的模式(访问模式):只读、写入、追加等。
  3. encoding: 编码格式(推荐使用UTF-8)
复制代码
样例代码:
  1. f = open('python.txt', 'r', encoding='utf-8')
复制代码
此时的f是open函数的文件对象,注意:此时的f是open函数的文件对象,对象是Python中一种特殊的数据类型,拥有属性和方法,可以使用对象.属性或对象.方法对其进行访问,后续面向对象课程会给大家进行详细的介绍。
1.2.2.2 mode常用的三种基础访问模式

模式描述r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。如果该文件不存在,创建新文件。a打并一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。样例代码
  1. # 打开文件
  2. f = open("F:/Study_Python/t.txt", "r", encoding="UTF-8")
  3. print(type(f))
复制代码
读取文件类型:

1.2.3 read()读取文件

无论是什么读取方法,都会续接上次的内容
read()方法:

文件对象.read(num)
num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。
readlines()方法:

读取全部行
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
  1. # 打开文件
  2. f = open("F:/Study_Python/t.txt", "r", encoding="UTF-8")
  3. # 读取文件 - readline()
  4. lines = f.readlines()  # 读取全部行,并封装到列表中
  5. print(f"lines对象的类型:{type(lines)}")
  6. print(f"lines的内容有:{lines}")
复制代码
若多次调用read方法时,下一个read的开头会在上一个read的结尾处
样例代码文件内容:
  1.          《悯农二首》
  2.      作者:李绅
  3. 春种一粒粟,秋成万颗子。
  4. 四海无闲田,农夫犹饿死。
  5. 锄禾日当午,汗滴禾下土。
  6. 谁知盘中餐,粒粒皆辛苦。
复制代码
样例代码:
  1. # 打开文件
  2. f = open("F:/Study_Python/t.txt", "r", encoding="UTF-8")
  3. # 读取文件 - read()
  4. print(f"读取20个字节的结果:"{f.read(20)}"")
  5. print(f"read读取全部内容的结果:"{f.read()}"")
复制代码
输出结果:

readline()方法:

一次读取一行
可以使用for循环读取文件行,语法:
  1. for line in open("F:/Study_Python/t.txt", "r", encoding="UTF-8"):
  2.     print(line)
复制代码
每一个line都是一个临时变量
1.2.4 文件关闭操作

通过close()关闭文件对象,也就是关闭对文件的占用。
!如果不调用close,同时程序没有停止运行,则这个文件就一直被Python程序占用。
语法:
  1. f.close()
复制代码
1.2.5 with open语法

自动完成关闭文件对象的操作
语法:
  1. with open("F:/Study_Python/t.txt", "r", encoding="UTF-8") as f:
  2.     for line in f:
  3.         print(f"每一行数据是:{line}")
复制代码
输出:

1.2.6 操作汇总

操作功能文件对象= open(file, mode, encoding)打开文件获得文件对象文件对象.read(num)读取指定长度字节,不指定num读取文件全部文件对象.readline()读取一行文件对象.readlines()读取全部行,得到列表for line in文件对象for循环文件行,一次循环得到一行数据文件对象.close()关闭文件对象with open() as f通过with open语法打开文件,可以自动关闭1.3 文件的写入操作

文件流程:
  1. # 1.打开文件
  2. f = open("F:/Study_Python/t.txt", "w", encoding="UTF-8")
  3. # 2.文件写入
  4. f.write('hello world!')   # 写入内容
  5. # 3.内容刷新
  6. f.flush()                        # 刷新内容到硬盘中
  7. # 4.close关闭
  8. f.close()  # 内置了flush的功能
复制代码
注意:

  • 直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
  • 当调用flush的时候,内容会真正写入文件
  • 这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)
  • w模式:

    • 文件不存在:创建新文件,进行写
    • 文件存在:清空原文件内容,再写入

1.4 文件的追加写入操作

文件流程:
  1. # 1.打开文件
  2. f = open("F:/Study_Python/t.txt", "a", encoding="UTF-8")
  3. # 2.文件写入
  4. f.write('hello world!')
  5. # 3.内容刷新
  6. f.flush()
  7. # 4.close关闭
  8. f.close()  # 内置了flush的功能
复制代码
a模式:
- 文件不存在:创建文件
- 文件存在:在文件末尾追加写入文件
2.异常模块与包

2.1 异常

程序正常执行过程中出现的不正常的情况,该情况影响了程序的正常执行。
简单案例:
  1. # 读取一个不存在的文件
  2. f = open("F:/Study_Python/t1.txt", "r", encoding="UTF-8")
复制代码
输出结果:

2.2 异常的捕获

程序遇到异常的两种情况:

  • 整个程序因为Bug停止运行
  • 对Bug进行提醒,整个程序继续运行
捕获异常的作用在于:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续手段。
2.2.1 基本语法:
  1. try:
  2.         可能发生错误的代码
  3. except:
  4.         如果出现异常执行的代码
复制代码
简单案例:
  1. try:
  2.     f = open("F:/Study_Python/t1.txt", "r", encoding="UTF-8")
  3. except:
  4.     print("由于文件不存在,出现异常,修改open模式")
  5.     f = open("F:/Study_Python/t1.txt", "w", encoding="UTF-8")
复制代码
输出结果:

2.2.2 捕获指定异常

基本语法:
  1. try:
  2.         print(name)
  3. except NameError as e:
  4.         print('name变量名称未定义错误')
复制代码
2.2.3 捕获多个异常

当捕获多个异常时,可以把要捕获的异常类型的名字,放到except后,并使用元组的方式进行书写。
  1. try:
  2.         print(1/0)
  3. except (NameError, ZeroDivisionError):
  4.         print('ZeroDivision错误...')
复制代码
2.2.4 捕获全部异常
  1. # 捕获全部异常
  2. try:
  3.     print(1 / 0)
  4. except Exception as e:
  5.     print(f"出现异常:{e}")
复制代码
2.2.5 异常else

else表示的是如果没有异常要执行的代码。
  1. try:
  2.     print(1)
  3. except Exception as e:
  4.     print(e)
  5. else:
  6.     print("我是else,是没有异常的时候执行的代码")
复制代码
2.2.6 异常finally

finally表示的是无论是否异常都要执行的代码,如关闭文件。
  1. try:
  2.     f = open("t.txt", "r")
  3. except Exception:
  4.     f = open("t.txt", "w")
  5. else:
  6.     print("我是else,是没有异常的时候执行的代码")
  7. finally:
  8.     print("我是finally,无论有没有异常,我都会执行的代码")
  9.     f.close()
复制代码
输出结果:

2.2.7 异常的传递性

异常是具有传递性的
当函数func01中发生异常,并且没有捕获处理这个异常的时候,异常会传递到函数func02,当func02也没有捕获处理这个异常的时候main函数会捕获这个异常,这就是异常的传递性.

图:黑马程序员
当所有函数都没有捕获异常的时候,程序就会报错
3.模块

Python模块就是一个Python文件,以 .py 结尾
模块能定义函数,类和变量,模块内也可以包含可执行的代码
3.1 模块的导入方式


  • 导入语法:
  1. [from 模块名] import [模块 | 类 | 变量 | 函数 | *] [as 别名]
复制代码

  • 常用的组合形式如:

    • import 模块名
    • from 模块名 import 类、变量、方法等
    • from 模块名 import *
    • import 模块名 as 别名
    • from 模块名 import 功能名 as 别名

  • 基本语法:
  1. import 模块名
  2. import 模块名1,模块名2
  3. 模块名.功能名()
复制代码
案例代码:
  1. # # 使用import导入
  2. # import time
  3. #
  4. # print("开始1")
  5. # time.sleep(1)
  6. # print("结束1")
  7. #
  8. # # 使用from导入sleep的具体功能
  9. # from time import sleep
  10. #
  11. # print("开始2")
  12. # sleep(5)
  13. # print("结束2")
  14. # # 使用from导入sleep的全部功能
  15. # from time import *
  16. # print("开始3")
  17. # sleep(5)
  18. # print("结束3")
  19. # 使用as给特定功能加上别名    给特定功能改名
  20. # from time import sleep as s
  21. # print("开始4")
  22. # s(5)
  23. # print("结束4")
复制代码
3.2 自定义模块

每个Python文件都可以作为一个模块,模块的名字就是文件的民资,也就是说自定义模块名必须要符合标识符命名规则

当导入多个模块时,且模块内有同名功能,当使用这个同名功能时,调用的是,后面导入的模块的功能。
3.3 __main__

当一个 Python 模块或包被导入时,__name__ 会被设为模块的名称。
调用模块时,不会执行__main__相关代码,但在执行模块本身文件时,会执行__main__相关代码
if _main_== "_main_"表示,只有当程序是直接执行的才会进入if内部,如果是被导入的,则if无法进入
3.4 __all__

如果一个模块文件中有_all_变量,当使用from xxx import()导入时,只能导入这个列表中的元素

如上代码:只能导入test_A()
4.包

包,就是里面装了一个__init__.py文件的文件夹,该文件夹可用于多个模块文件。
包的本质就是模块
步骤:

  • 新建包my_package
  • 新建包内模块:my_module1和my_module2
  • 定义模块内代码
新建包后,包内部会自动创建_——int__.py文件,这个文件控制包的导入行为。
4.1 导入包

可使用__all__变量,控制 import *
4.1.1 方式一
  1. import 包名.模块名
  2. 包名.模块名.目标
复制代码
4.1.2 方式二
  1. from 包名 import 模块名
  2. 模块名.目标
复制代码
4.1.3 方式三
  1. from 包名.模块名 import 目标
  2. 目标
复制代码
4.2 安装第三方包

一个包,就是一堆同类型功能的集合体
命令提示符程序内输入:
pip install 包名称
即可通过网络快速安装第三方包
4.2.1 pip的网络优化

我们可以通过如下命令,让其连接国内的网站进行包的安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莫张周刘王

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表