一、文件的读取和写入
# 编码
# 什么是文件
# 文件的打开、读写、关闭
# 打开 r表示只读
f = open("D:\\a.txt", "r", encoding="UTF-8")
print(type(f)) # <class '_io.TextIOWrapper'>
# 读取文件中10个字节的数据
l = f.read(10)
print(l) # Java 是一个通用
print(type(l)) # <class 'str'>
# 读取文件中的全部内容, 这里注意到读取的内容是接上面10个字节后的数据,这是因为同一个文件对象读取数据都会记录指针,每次都是读指针后的数据
s = f.read()
print(s)
# 读取文件的全部行,封装到列表中
f = open("D:\\a.txt", "r", encoding="UTF-8")
my_list = f.readlines()
print(my_list)
# 按行读取
f = open("D:\\a.txt", "r", encoding="UTF-8")
print(f.readline()) # 每次读一行
print("---------------------------")
# for循环读取文件
for line in open("D:\\a.txt", "r", encoding="UTF-8"):
print(line)
# 关闭文件,避免资源占用
f.close()
print("================================================")
# with open as f 此写法会自动帮我们关闭文件,避免资源浪费
with open("D:\\a.txt", "r", encoding="UTF-8") as file:
for line in file:
print(line)
# 文件的写入 w模式下如果文件不存在则创建文件,如果文件存在,则写入的内容会覆盖旧内容
f = open("D:\\test.txt", "w", encoding="UTF-8")
f.write("好好学习,天天向上")
f.flush()
f.close() # close方法实际内置了flush方法
# 文件的追加 a模式下如果文件不存在则创建文件,如果文件存在,则写入的内容会追加到旧内容后面
f = open("D:\\test1.txt", "a", encoding="UTF-8")
f.write("好好学习,天天向上!!!\n")
f.flush()
f.close() # close方法实际内置了flush方法
二、异常
1. 异常处理
# 基本捕获异常
try:
open("D:\\DDD.txt", "r")
except :
print("代码发生了异常")
# 捕获Exception异常
try:
open("D:\\DDD.txt", "r")
except Exception as e:
print(f"代码发生了异常:{e}")
# 捕获指定异常
try:
print(name)
except NameError as e:
print(f"出现异常:{e}") # 出现异常:name 'name' is not defined
# 捕获多个异常
try:
1 / 0
except (NameError, ZeroDivisionError) as e:
print(f"出现异常:{e}")
# 捕获异常
try:
print("xxx")
except Exception as e:
print(f"出现异常{e}")
else:
print("没出现异常处理的逻辑,可选")
finally:
print("无论是否异常都会处理的逻辑")
2. 异常传递
# 异常的传递
def func1():
print("func1 start")
1/0
print("func1 end")
def func2():
print("func2 start")
func1()
print("func2 end")
def main():
try:
func2()
except Exception as e:
print(f"出现异常{e}")
main() # 出现异常division by zero
三、模块
1. 使用内置模块
模块:是一个Python文件,以.py结尾,模块能定义函数,类和变量,模块里也能包含可执行代码。我们可以当成工具包使用。注意模块的导入一般放到顶部
导入语法:[from 模块名] import [模块 | 类 | 变量 | 函数 | *] [as 别名]
# 常用形式
# 1. import 模块名
import time
time.sleep(2)
print("end")
# 2. from 模块名 import 类、变量、方法等
from time import sleep # 从time模块中导入sleep函数
sleep(2)
print("kk")
# 3. from 模块名 import *
from time import * # 从time模块中导入全部功能
sleep(2)
print("jj")
# 4. import 模块名 as 别名
import time as t
t.sleep(2)
print("end")
# 5. from 模块名 import 功能名 as 别名
from time import sleep as sl
sl(2)
print("end")
2. 自定义模块
自定义模块就是创建一个py结尾文件,里面可以添加变量,函数,类等,以便我们使用
# 自定义模块就是创建一个py结尾文件,里面可以添加变量,函数,类等,以便我们使用
# 导入自定义模块与导入内置模块一样的用法
import my_module
my_module.test(1, 2)
# 导入不同模块的同名功能,只会时候最后导入的那个模块的功能
from my_module import test
from my_module import test
test(1, 2)
# __main__ 变量,如果在模块内调用了函数作为测试,又不想被其它代码引入的时候执行测试代码,则可以使用这个main变量
if __name__ == "__main__":
test(1, 2)
# __all__ 变量,from 模块 import * 的时候,如果顶部写了all变量,那么导入的不是所有,而是all定义的功能
from my_module import *
__all__ = ["test"]
test(1, 2)
四、Python 包
1. 自定义包
包就是一个文件夹,里面可以存放许多Python模块,通过包,在逻辑上将一批模块归为一类,方便使用。
__init__.py
文件会在创建包的时候默认创建,通过这个文件来表示一个文件夹是Python的包,而非普通的文件
# 导包方式一
import my_package.my_module01
import my_package.my_module02
my_package.my_module01.func01()
my_package.my_module02.func02()
# 导包方式二
from my_package import my_module01
from my_package import my_module02
my_module01.func01()
my_module02.func02()
# 导包方式三
from my_package.my_module01 import func01
from my_package.my_module02 import func02
func01()
func02()
# __all__ 变量控制* 号
from my_package import *
my_module01.func01()
my_module02.func02()
2. 引入第三方包
第三方包就是别人写好的实用的Python包,非官方提供,我们可以通过命令行下载第三方包
pip install 包名
# 国内加速
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名
我们还可以在pycharm中安装