文件和模块
文件和模块
一: 模块使用
二: 包的使用
三: 常用模块
四: 文件的操作
模块使用
模块 Module
什么是模块
模块是一个包含有一系列数据,函数,类等组成的程序组
模块是一个文件 ,模块文件名通常以.py结尾
作用:
让一些相关的数据,函数,类等有逻辑的组织在一起,使逻辑结构更新加清晰
模块中的数据,函数和类等可以提供给其它模块或程序使用
模块的分类:
1. 内置模块, 在解释执行器内部定义,可以直接使用
2. 标准库模块, 安装python时已安装且可以直接使用
3. 第三方模块(通常为开源), 需要自己安装
4. 用户自定义模块(可以作为其它人的第三方模块)
------------------------------------------------------------
模块的导入 import
import 语句
语法: import 模块名1 [as 模块新名1], 模块名2 [as 模块新名2], ...
作用: 将某模块整体导入到当前模块中
示例:
import math # 导入数学模块
import sys, time # 导入系统模块和时间模块
用法:
模块名.属性名
如:
print(math.factorial(5))
print(math.cos(0))
----------------------------------------------------------
from import 语句
语法: from 模块名 import 模块属性名1 [as 属性新名1], 模块属性名2 [as 属性新名2], .....
作用: 将某模块内的一个或多个属性导入到当前模块的作用域
示例:
from math import factorial as fac
from math import sqrt
from math import pi, e, sin, cos
print('5的阶乘是:', fac(5))
print('9的平方根是:', sqrt(9))
print('圆周率是:', pi)
-----------------------------------------------------------
from import * 语句
语法: from 模块名 import *
作用: 将某模块的所有属性导入到当前模块
示例:
from math import *
print(sin(pi/2))
print(factorial(5)) # 可以直接使用math里的全部属性
函数:
dir(obj)函数,返回所有属性的字符串列表
help(obj)函数,可以查看模块的文档字符串
dir 函数:
dir([对象]) 返回一个字符串列表
作用:
1.如果没有参数调用,则返回当前作用域内所有变量的列表
2.如果给定一个对象作为参数,则返回这个对象的所有变量的列表
1) 对于一个模块,返回这个模块的全部属性
2) 对于一个类对象,返回类对象的所有变量并递归基类对象的所有变量
3) 对于其它对象返回所有变量,类变量和基类变量
用户自定义模块
要求:
模块名以".py"结尾
模块名必须是标识符的命名规则
避免名称和内建模块冲突
导入方式:
import 语句
from import 语句
from import * 语句
import 语句的搜索路径顺序
1. 索引内建模块 builtin
2. 搜索程序的运行时路径(当前路径)
3. sys.path提供的路径
两种方法让用户自定义模块被导入:
1) 将模块安装(复制)到 sys.path提供的路径
2) 在运行程序时,在sys.path里添加自定义的路径
模块的加载过程:
在模块导入时,模块的所有语句都会执行
如果一个模块已经被导入,则再次导入时不会重新执行模块内的语句
模块的重新加载:
import mymod
import imp
imp.reload(mymod)
----------------------------------------------------------------------
模块被导入和执行的过程
1. 先搜索相关路径找模块文件(.py文件)
2. 判断是否有此模块对应的.pyc,如果pyc文件存在且比.py文件新则直接加载.pyc文件
3.否则用模块名.py 文件生成.pyc 并加载执行
模块的编译
编译 解释执行
mymod.py ---> mymod.pyc ----> python3
模块的属性
模块的文档字符串
模块内的第一次没有赋值给任何变量的字符串为模块的文档字符串
模块内的文档字符串绑定在模块的__doc__属性上
__doc__ 属性 用来绑定文档字符串
__file__属性
__file__ 属性用于绑定此模块对应的文件路径
__name__属性
作用:
1. 用来记录模块自身的名字
2. 用来判断是否为主模块
(注: 主模块是指程序最先被python3执行的模块)
说明:
当此模块为主模块运行时,__name__的值为'__main__'
当此模块不是主模块时,__name__绑定模块的名字
模块的__all__ 列表:
模块中的__all__列表必须是一个字符串列表
作用: 当用from xxx import *导入时,只导入__all__列表内的属性
模块的隐藏属性
模块中以'_' 开头的属性,在from xxx import *导入时将不 被导入,通常称这些属性为隐藏属性
包的使用
包(模块包) Package
包的定义
包是将模块以文件夹的组织形式进行分组管理的方法
作用:
将一系列模块进行分类管理,有利于防止命名冲突
可以在需要时加载一个或部分模块而不是全部模块
包内的 __init__.py 文件
__init__.py 是常规包内必须存在的文件
__init__.py 文件会在包加载时被自动调用
作用:
编写此包的内容
编写包的文档字符串
包的导入:
规则类似于模块的导入规则
import 包名 [as 包新名]
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名 [as 模块新名]
..................
from 包名 import 模块名 [as 模块新名]
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 属性名 [as 属性新名]
.................
from 包名 import *
from 包名.模块名 import *
................
import 语句搜索引 包的路径顺序
1. 搜索程序运行时的路径(当前路径)
2. sys.path提供的路径
__init__.py 内的__all__列表
作用:
用来记录此包中有哪儿些子包或模块需要导入
当用from 包 import *语句导入模块时,只查找 __all__ 列表中所有的模块或子包
说明:
__all__列表只有在from xxx import *导入时起作用
包的相对导入
包的相对导入是指包内模块的相互导入
语法:
from 相对路径包或模块名 import 属性或模块名
或
from 相对路径包或模块名 import *
相对路径
在 from 和 import 间可以用相对路径:
. 代表当前目录
.. 代表上一级目录
... 代表上二级目录
.... 以此类推
注: 相对导入时不能超出包的外部
常用模块
持续更新中.........
文件的操作
文件 File
什么是文件
文件是用于数据存储的单位
文件通常用来长期存储数据
文件中的数据是以字节(byte)为单位进行存储的
文件的操作流程:
1. 打开文件
2. 读/写文件
3. 关闭文件
注:任何操作系统,一个应用程序同时打开文件的数量有最大数限制
文件的打开函数:
open(file, mode='rt') 用于打开一个文件,返回此文件对应的文件流对象,如果打开失败则会触发OSError错误
文件的关闭方法:
F.close() # 关闭文件,释放系统资源
-----------------------------------------------------------------
文本文件的操作:
文本文件的模式字符 't'
说明:
1. 对文本文件的读写需要用字符串str 进行读取和写入数据
2. 默认文件中存储的都是字符(文字)数据,在读写中会自动进行编码转换操作
3. 以行为单位分隔,在python内统一用'\n'作用换行符进行分隔
各操作系统的换行符:
Linux换行符: '\n'
Windows 换行符: '\r\n'
旧的Macintosh换行符: '\r'
新的Mac OS 换行符: '\n'
文件流对象常用的方法见:
python_base_docs_html/文件.html
文本文件读方法:
F.readline()
F.readlines()
F.read([字符数或字节数])
文本文件的写方法
模式字符串: 'w'/'x'/'a'
F.write(字符串)
F.writelines(字符串列表)
文件的迭代读取
文件流对象是可迭代对象,迭代过程将以换行符'\n'作用分隔符依次获取
示例:
f = open('mynote.txt', 'rt')
for line in f: # f绑定的文件流对象是可迭代对象
print(line)
标准输入输出文件:
sys.stdin 标准输入文件(默认为键盘设备)
ctrl + d 快捷键是让键盘输入文件结束符
sys.stdout 标准输出文件 (默认为屏幕终端)
sys.stderr 标准错误输出文件(默认为屏幕终端)
模块名: sys
说明:
1. 标准文件不需要打开和关闭就可以使用
2. 每一个python程序启动后都会有以上三个文件供我们使用
二进制文件操作:
模式字符: 'b'
默认文件中存储的都是以字节为单位的数据,通常有人为的格式
对二进制文件的读写需要用字节串(bytes) 进行操作
常用的操作方法:
F.read([字节数/字符数])
对于文本文件, F.read()返回类型为字符串str
对于二进制文件,F.read()返回类型为字节串bytes
F.write()
同上,对于二进制文件,写入的数据为字节串bytes或bytearray
F.tell() 方法
返回当前文件流的读写位置(从0开始,以字节为单位)
F.seek方法
作用: 设置文件的读写位置
格式: F.seek(偏移量, whence=相对位置)
偏移量
大于0代表向文件尾方向移动
小于0代表向文件头方向移动
相对位置
0 代表从文件头开始偏移
1 代表从当前位置开始偏移
2 代表从文件尾开始偏移
汉字编码
问题:
十个汉字占多少个字节?
20个(GBK编码)
30个(UTF-8编码)
国标编码
GB18030(二字节或四字节编码, 27533个字)
GBK(二字节编码 21003个字)
GB2312(二字节编码 6763个字) (Windows上常用)
国际标准:
UNICODE <---> UTF-8
(Linux / Mac OS X / IOS / Android常用)
UTF-8 (8-bit Unicode Transformation Format)
python的编码(encode)字符串:
'gb2312'
'gbk'
'gb18030'
'utf-8'
'ascii'
编码注释:
在源文件中第一行或第二行写入如下内容为编码注释
# -*- coding:gbk -*-
# 设置源文件编码格式为:gbk
或
# -*- coding:utf-8 -*-
# 设置源文件编码格式为:utf-8
作用:
告诉解释执行器,当前的.py文件的编码格式是什么
浙公网安备 33010602011771号