模块
python中的模块就是一个个的python文件
模块:.py文件
程序构成:
1. 顶层文件
2. 各个模块
模块:module
模块的特点
- 模块的概念:可以将代码量比较大的程序,分割成多个,有组织、彼此独立但又能相互调用的代码片段,这些自我包含有组织的代码就是模块
- 模块在物理形式上,表现为:以.py结尾的文件
1. 一个文件可以被看做是一个模块,一个模块也可以被看做是一个文件
2. 文件名 = 模块名+后缀
3. 每个模块都有自己的命名空间(作用域) - Python可以利用导入的形式,完成模块之间的相互调用
关键字:import
通过导入的方式,将多个模块之间关联起来,构成庞大的项目体系 - 模块的特性
1. 模块也是个对象
2. 模块中的所有的类、变量、函数,都会成为模块对象的属性
模块的导入
- 包:package
1. 包是一种目录结构
2. 包也是对象
init.py文件就是包对象的构造方法
3. 创建包:
1. 创建一个文件夹
2. 在该文件夹下创建__init__.py文件(空文件)
3. 包可以有子包,包结构是可以多层嵌套的:
模块名:大包名.子包名.模块名—完整的模块名
4. 包是模块不可或缺的一部分
导入的形式:
声明:当前文件中使用的属性或者模块,都来自于import指定的路径
- import 完整模块名
1. 只要使用引入的模块,则必须加上所有的包路径
2. 如果要使用模块中的属性,必须加上所有的包路径和模块名
3. 只能导入到模块级别的数据
4. 可以很大程度去避免重名 - import 完整模块名 as 别名
1. 使用更加方便
2. 注意模块中的其他属性,别名也不要冲突
小结:
如果导入多个模块:
1. 写多个import语句即可
2. 写一个import,用逗号隔开多个路径(完整路径)
3. 如果要起别名,需要分别起别名
3. from 完整的模块名 import 属性
1. 可以导入属性界别的数据
2. 注意模块中的其他属性,不要和被导入的属性名冲突
4. from 完整的模块名 import 属性 as 别名
1. 可以避免属性名冲突的问题
小结:
如果导入多个模块:
1. 写多个from…import…
如果导入多个属性
1. 在import后面直接用逗号隔开
2. 如果要起别名,要分开起别名
模块的作用
- 提高代码的可重用性
1. 是封装的产物
2. 流程会更加简化 - 提高了代码的可读性
- 减少代码的冗余
补充
- 模块中尽量不要直接书写逻辑代码
逻辑代码:while,for,if,输入输出等
逻辑代码会在模块被加载的时候自动执行,会影响用户的使用- 模块中应该只包含:
- 类
- 函数
- 变量
- 测试(if name=‘main’)
_name_
- name:是一个属性,存储对象的名字
- 如果直接使用__name__:属于当前模块的属性
相当于:模块.name
如果在当前模块打印:结果为:main
表示主流程就在当前模块
如果被导入并打印__name__:完整的模块名
表示被调用
此时主流程在主动导入的模块中 - 常常用作于测试代码
if name == ‘main’:
第三方库
- pypi社区:python官方的社区,里面包含了所有的python库
https://pypi.python.org/pypi - pip包管理工具
a库
安装:pip install a
查看已经安装的库的列表:pip list
卸载:pip uninstall a - site-packages
存储第三方模块 - 模块的分类:
1. 自带模块:标准库:内置库
2. 自定义模块:自己写的模块
3. 第三方模块:除了标准库和自己定义的以外(pypi)
文件
计算机:硬件+软件
CPU:处理器,计算
主板:承载其他硬件
IO设备:显示屏、鼠标、键盘、麦克风、音响
内存:读写速度快。缺点:贵!一旦断电,数据清空
所有的程序都是运行在内存中的
硬盘:运行速度慢。大、便宜、可以持久化数据
机械硬盘:4500R 7200R 10000R 绿盘 蓝盘 紫盘 黑盘 金盘
1T
固态硬盘:速度快,体积小,贵
128G 256G 512G
- 文件
PY dll xml md MP4 avi rmvb wmv mkv jep jepg gif png html cpp
- 文件是以计算机硬盘为载体存储在计算机上的信息集合
文本、图片、视频、音频、PY
文件通常都有扩展名:—用于指示文件的类型
大部分情况有扩展名
hosts文件没有扩展名
自定义的文件流没有扩展名
- 打开文件
- open(file, mode=‘r’, encoding=None)
打开一个文件资源,返回一个IO流
file:路径,如果要写文件名,当前文件必须和要读取的文件在同一目录下,建议使用绝对路径
mode:打开文件的方式 默认是r:只读
encoding:编码方式。
- 常用模式
r:以只读的方式打开文件
rb:以二进制形式只读的打开文件
w:以只写的方式打开文件,如果该文件已经存在则覆盖旧文件
wb:同上二进制
a+:追加,以只写的方式打开文件,如果文件已经存在,则在旧文件上追加写,如果不存在则创建新文件
ab+:同上二进制
# @Time : 2021/8/31 14:53
# @Author : XX
# @File : 文件.py
# @Software: PyCharm
# o = open(r'E:\太原理工2018\代码\baizhi\tyut2018\day14\info.txt',
# encoding='utf-8')
o = open(r'E:\太原理工2018\代码\baizhi\tyut2018\day14\info.txt',
mode='w',
)
# o.write('')
# o = open(r'E:\太原理工2018\代码\baizhi\tyut2018\day14\info2.txt',
# mode='a+'
# ,encoding='utf-8')
# o.write('是的!')
# 使用完毕后,记得释放资源
o.close()
- 字符流
用于传输字符串(文本,一次性传输多个字符) - 字节流
用于传输二进制文件,一次只能传输一个字节,字节流可以传输任何文件
字节流效率低
图片、音乐、视频、 - 中文乱码:
读写中文时,要保证读写的编码必须一致,如果不一致,会出现乱码
解决:
修改读写的编码方式
英文不会出现乱码问题:
ASCII码表—符号、英文,现有的所有编码方式,都兼容ASCII码表
- 流对象的相关属性和方法
1. close()
关闭流,释放资源
2. closed
返回流的关闭状态。关闭:True,没关闭:False
3. mode
返回当前流的打开方式
4. name
返回文件的绝对路径
5. read(size)
按照字符数读取,如果不设置size默认全部读出
6. readline()
按照字符读取一行
7. readlines()
将所有内容,按行读取,以列表形式进行返回
8. write(str)
向流中写入一个字符串
9. writelines(iterable)
通过一个序列向流中写入多个字符串
- with open语句
with open(r'E:\太原理工2018\代码\baizhi\tyut2018\day14\info.txt',
mode='r',
encoding='utf-8'
) as r:
print(r.read())
print(r.closed)
print(r.closed)
可以帮助自动关闭流资源,不需要手动关闭
语法:
with open(文件路径,模式) as 变量:
# 核心代码
-
补充模块
-
os模块
操作系统模块
文件的相关操作,都和操作系统有关
让python可以和操作系统间接地进行沟通
import os
path = r'E:\太原理工2018\代码\baizhi\tyut2018\day14\OS模块\案例'
print(os.listdir(path))
# 创建一层目录
# os.mkdir(path+r'\a')
# 删除一个目录,修改pycharm的权限
# os.remove(path+r'\a')
# 递归的删除多层目录
# os.removedirs(path)
# 创建多级目录
# os.makedirs(path+r'\a\b\c\d\e')