十四章
什么叫模块
模块的英文为Modules
函数与模块的关系:一个模块中可以包含N多个函数
在Python中一个扩展名为.py的文件就是一个模块
使用模块的好处:
1、方便其他程序和脚本的导入并使用
2、避免函数名和变量冲突
3、提高代码的可维护性
4、提高代码的可重用性
自定义模块
创建模块
新建一个.py文件,名称尽量不要与Python自带的标准模块名称相同
导入模块
import 模块名称 [as别名] 例如: import math
from 模块名称 import 函数/变量/类 例如:from math import pi
导入自定义模块
import 自定义模块名
以主程序的形式执行
在每个模块的定义中都包括一个记录模块名称的变量_name_,程序可以检查该变量,以确定他们在那个模块中执行。如果一个模块不是被 导入到其他程序中执行,那么它可能在解释器的顶级模块中执行。顶级模块的_name_变量的值为_main_
if _name_ = ‘_main_’:
pass
代码演示:
def add(a, b):
return a+b
# 只有当点击运行Calac2时,才会执行运算
if __name__ == '__main__':
print(add(10, 20))
import Calc2
print(Calc2.add(100, 200))
python中的包
Python中的包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下
作用:
1、规范代码
2、避免模块名称冲突
包与目录的区别:
1、包含_int_.py文件的目录称为包
2、目录里通常不包含_int_.py文件
包的导入
from 包名 import 模块名
导入带有包的模块时的注意事项
import pageage1
import 模块名
使用import方式进行导入时,只能跟包名或者模块名
第三方模块的安装及使用
sys 与Python解释器及其环境操作相关的标准库
time 提供与时间相关的各种函数的标准库
os 提供了访问操作系统服务功能的标准库
calendar 提供与日期相关的各种函数的标准库
urllib 用于读取来自网上(服务器)的数据标准库
json 用于使用JSON序列化和反序列化对象
re 用于在字符串中执行正则表达式匹配和替换
math 提供标准算术运算的标准库
decimal 用于进行精确控制运算精度、有效数位和四舍五入操作的十进制运算
logging 提供了灵活的记录事件、错误、警告和调试信息等日志信息的功能
import sys
import time
import urllib.request
print(sys.getsizeof(45))
print(sys.getsizeof(24))
print(sys.getsizeof(False))
print(sys.getsizeof(True))
print(time.time())
print(time.localtime(time.time()))
print(urllib.request.urlopen("http://www.baidu.com").read())
十五章
编码格式介绍
常见的字符编码格式
1、Python的解释器使用的是Unicode(内存)
2、.py文件在磁盘上使用UTF-8存储(外存)
文件的读写原理
文件的读写俗称“IO操作”
文件读写的操作流程 Python操作文件—打开或新建文件—读、写文件—关闭资源
文件的读写操作
内置函数open()创建文件对象
通过IO流将磁盘文件中的内容与程序中的对象中的内容进行同步
语法规则:
file = open (filename [, mode, encoding])
file:被创建的文件对象 open:创建文件对象的函数 filename:要创建或打开的文件名称 mode:打开模式默认为只读 encoding:默认文本文件中字符的编码格式为gbk
常用的文件打开模式
文件类型,按文件中数据的组织形式,文件分为以下两大类
1、文本文件:存储的是普通“字符”文本,默认为unicode字符集,可以使用记事本程序打开
2、二进制文件:把数据内容用“字节”进行存储,无法用记事本打开,必须使用专用的软件打开,举例:mp3音频文件,jpg图片,.doc文档等
打开模式
r: 以只读模式打开文件,文件的指针将会放在文件的开头
w: 以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件指针在文件的开头
a: 以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾
b: 以二进制方式打开文件,不能单独使用,需要与共其他模式一起使用,rb,或者wb
+: 以读写方式打开文件,不能单独使用,需要与其他模式一起使用,a+
file = open("a.txt", 'r')
print(file.readlines())
file.close()
file = open("b.txt", 'w')
print(file.write("python"))
file.close()
file = open("b.txt", 'a')
print(file.write("python"))
file.close()
src_file = open('logo.png', 'rb')
target_file = open('copylogo.png', 'wb')
target_file.write(src_file.read())
target_file.close()
src_file.close()
文件对象常用的方法
read([size]): 从文件中读取size个字节或字符的内容返回。若省略[size],则读取到文件末尾,即一次读取文件所有内容
readline(): 从文本文件中读取一行内容
readlines(): 把文本文件每一行都作为独立的字符串对象,并将这些对象放入列表返回
write(str): 将字符串str内容写入文件
writelines(s_list): 将字符串列表s_list写入文本文件,不添加换行符
seek(offset[,whence]): 把文件指针移动到新的位置,offset表示相对于whence的位置:offset:为正往结束方向移动,为负往开始方向移动,whence:不同的值代表不同含义:
0:从文件开头开始计算(默认值)
1:从当前位置开始计算
2:从文件尾开始计算
tell(): 返回文件指针的当前位置
flush(): 把缓冲区的内容写入文件,但不关闭文件
close(): 把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源
with语句(上下文管理)
with语句可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的
例:with open(“logo.png”, “rb”) as src_file:
with open("a.txt", "r") as file:
print(file.read())
其中open()内的就是上下文表达式,结果为上下文管理器,同时还创建了一个运行时上下文,自动调用_ente\r_()方法,并将返回值赋值给src_file,离开运行时上下文,自动调用上下文管理器的特殊方法_exit_()
with open("logo.png", "rb")as src_file:
with open("copylogo2.png", "wb")as tar_file:
tar_file.write(src_file.read())
目录操作
os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通过与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。
os模块与os.path模块用于对目录或文件进行操作
# os模块与操作系统相关的一个模块
import os
# os.system("notepad.exe")
# os.system("calc.exe")
os.startfile("D:\\Application\\QQ\\Bin\\qq.exe")
os模块操作目录相关函数
getcwd(): 返回当前的工作目录
listdir(path): 返回指定路径下的文件和目录信息
mkdir(path[,mode]): 创建目录
mkdirs(path1/path2…[,mode]): 创建多级目录
rmdir(path) :删除目录
removedirs(path1/path2…): 删除多级目录
chdir(path): 将path设置为当前工作目录
import os
print(os.getcwd())
list = os.listdir("../chap15")
print(list)
# os.mkdir("newdir")
os.rmdir("newdir")
os.path模块操作目录相关函数
abspath(path): 用于获取文件或目录的绝对路径
exists(path): 用于判断文件或目录是否存在,如果存在返回True,否则返回False
join(path,name): 将目录与目录或文件名拼接起来
splitext(): 分离文件名和扩展名
basename(path): 从一个目录中提取文件名
dirname(path): 从一个路径中提取文件路径,不包括文件名
isdir(path): 用于判断是否为路径
import os.path
print(os.path.abspath("dem05.py"))
print(os.path.exists("dem05.py"), os.path.exists("demo20"))
print(os.path.join("E:\\python", "demo13.py"))
# 把路径和文件分开
print(os.path.split("E:\\Learn\\Python\\test2\\chap15\\demo13.py"))
# 把文件名和扩展名分开
print(os.path.splitext("demo13.py"))
# 从目录中提取文件名
print(os.path.basename("E:\\Learn\\Python\\test2\\chap15\\demo13.py"))
# 从一个路径中提取文件路径
print(os.path.dirname("E:\\Learn\\Python\\test2\\chap15\\demo13.py"))
# 判断是否为路径
print(os.path.isdir("E:\\Learn\\Python\\test2\\chap15\\demo13.py"))
使用os模块的小案例
# 列出指定目录下的所有py文件
# 1、导入os
import os
# 2、获取当前目录
path = os.getcwd()
# 3、列出当前目录中的文件和目录信息
lis = os.listdir(path)
# 4、遍历lis,并获取以.py结尾的文件
for filename in lis:
if filename.endswith(".py"):
print(filename)
import os
path = os.getcwd()
lst_files = os.walk(path)
for dirpath, dirname, filename in lst_files:
"""print(dirpath)
print(dirname)
print(filename)"""
for dir in dirname:
print(os.path.join(dirpath, dir))
for file in filename:
print(os.path.join(dirpath, file))