文章目录
一、包
1.1 什么是包
- python程序中专门用来管理py文件的文件夹
- 文件夹中有一个特殊文件:init.py
- 导入包的时候‘init.py’文件一定会执行
- 普通文件夹一般用来管理项目需要的非代码文件
1.2 使用包中的内容
1.2.1 直接导入包
- import 包
- 通过‘包.’ 来使用包中 ‘init.py’ 文件中的全局变量
1.2.2 连包带模块
- import 包.模块
- 通过‘包.模块.’ 来使用模块中的全局变量
- import 包.模块 as 新名
- 结合重命名导入模块
1.2.3 只导入包中模块
- from 包 import 模块
- 通过‘模块.’ 来使用模块中的全局变量
1.2.3 只导入变量
- from 包.模块 import 变量1,变量2,变量3,…
- 直接使用变量1、变量2、变量3…
二、文件操作,操作文件内容
2.1 数据持久化
- 程序中使用和产生的数据默认保存在运行内存中
- 程序结束后,运行内存中的数据会销毁
- 想要不销毁数据,就将数据通过文件存储到硬盘中
- 保存在硬盘中就是数据持久化
- 硬盘操作的基本单位是文件
- 编程常见文件类型:txt、json、plist、数据库
1. 需要持久化的数据通过一个文件保存
2. 需要这个被持久化的数据时,不直接给值,而是从文件中读这个数据
3. 如果被持久化的数据发生了改变,需要把最新的值再重新写入文件中
2.2 文件操作
2.2.1 基本步骤
- 打开文件 -> 操作文件(读操作、写操作) -> 关闭文件
2.2.2 打开文件
- open(file, mode=‘r’, *, encoding=None)
1. file - 需要打开的文件的路径
绝对路径:文件在计算机中的全路径
相对路径:用 . 表示当前目录,当前代码文件所在的目录;./可省略
用 .. 表示当前目录的上层目录
用 .......
2. mode - 文件打开方式,读还是写;操作的数据对象是字符串还是二进制
- 以下方式一组必选一个:
决定打开方式: r - 只读
w - 只写;打开会会清空原来内容
a - 只写;在原文内容上追加
决定数据类型: t - 字符串(默认值)
b - 二进制
3. encoding - 文本文件编码方式,一般赋值为‘utf-8’
- 读写时编码方式要一致
- 只有文本文件在以‘t’的形式打开的时候,才能设置encoding
2.3 文件的读写
2.3.1 打开文件
- 以‘r’读的方式打开不存在的文件,会报错
- 以写的方式打开不存在的文件,会自动创建该文件
f = open('./sources/a', 'w', encoding='utf-8')
print(type(f)) # <class '_io.TextIOWrapper'>
f.write('窗前明月光\n')
2.3.2 关闭文件
- 文件关闭以后不能再进行操作
f.close()
- 自动关闭文件的写法
with open('./sources/a', 'a', encoding='utf-8') as f:
f.write('疑是地上霜\n')
f.write('举头望明月\n')
f.write('低头思故乡\n')
2.3.3 操作文件
2.3.3.1 读
- 文件对象.read()
- 从文件读写位置开始,读到文件末尾
with open('./sources/a', 'r', encoding='utf-8') as f:
result = f.read()
print('第一次读:', result) # 第一次读: 窗前明月光疑是地上霜
result = f.read()
print('第二次读:', result) # 第二次读:没有
f.seek(0) # 将读写位置移动到文件开头
result = f.read()
print('第三次读:', result) # 第三次读: 窗前明月光疑是地上霜
# 练习:使用readline将文本中的内容一行一行地读完
with open('./sources/c', 'r', encoding='utf-8') as f:
while True:
result = f.readline()
print(result)
if not result:
break
2.3.3.2 写
- 文件对象.write(数据)
# 练习:删除原文件第三行的内容
with open('./sources/a', encoding='utf-8') as f:
result = f.readlines()
with open('./sources/a', 'w', encoding='utf-8') as f:
if len(result) >= 3:
del result[2]
f.write(''.join(result))