一、模块
1.什么叫模块
模块英文为Modules,一个模块中可以包含N多个函数,在python中一个扩展名为.py的文件就是一个模块
模块的优点:方便其他程序和脚本的导入并使用;避免函数名和变量名冲突;提高代码的可维护性;提高代码的可重用性
#多个模块构成python程序
#模块中包含函数
def fun():
pass
def fun2():
pass
#模块中包含类
#类中包含类属性,类方法,静态方法,实例属性
class Student():
native_place='吉林'#类属性
def eat(self,name,age):
self.name=name
self.age=age
@classmethod
def cm(cls):
pass
@staticmethod
def sm():
pass
#模块中包含语句
a=10
b=20
print(a+b)
2.自定义模块
创建模块:新建一个.py文件,名称尽量不要与Python自带的标准模块名称相同
导入模块:import 模块名称 [as别名]
from 模块名称 import 函数/变量/类
import math
print(math,id(math),type(math),math.pi)
print(dir(math))
print(math.pow(2,3),type(math.pow(2,3)))#8.0 <class 'float'>
print(math.ceil(9.001))#10
print(math.floor(9.9999))#9
from math import pi
from math import pow
print(pi)#3.141592653589793
print(pow(2,3))#8.0
新建python文件calc.py
def add(a,b):
return a+b
def div(a,b):
return a/b
在其他python文件所在的文件夹上单击右键出现“Mark Directory as”,选择“Sources Root”后就可以导入calc模块
#第一种导入
import calc
print(calc.add(10,20))
print(calc.div(10,4))
#第二种导入
from calc import add
from calc import div
print(add(10,20))
print(div(10,4))
3.以主程序的形式执行
在每个模块的定义中都包括一个记录模块名称的变量__name__,程序可以检查该变量,以确定它们在哪个模块中执行。如果一个模块不是被导入到其他程序中执行,那么它可能在解释器的顶级模块中执行。顶级模块的__name__变量的值为__main__
if name=‘main’:
pass
新建python文件calc2.py
def add(a,b):
return a+b
print(add(10,20))
在其他文件中导入模块calc2
import calc2
print(calc2.add(100,200))#发现calc2.py中的print(add(10,20))也输出了结果
所以calc2改为
def add(a,b):
return a+b
if __name__ == '__main__':#输入main回车
print(add(10,20))#只有当点击运行calc2时,才会执行这步运算
4.python中的包
包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下,用于规范代码和避免模块冲突
包和目录的区别:包含__init__.py文件的目录称为包
目录中通常不包含__init__.py文件
包的导入:import 包名.模块名
新建包:在python文件所在的文件夹上单击右键出现“New”,选择“Python Package”就可以新建一个包
在包中新建模块moduleA和moduleB,在moduleA中写a=10,在moduleB中写b=100
然后在其他Python文件中写代码
import pageage1.module_A
print(pageage1.module_A.a)
import pageage1.module_A as ma#ma是pageage1.module_A这个模块的别名
print(ma.a)
#导入含有包的模块时的注意事项
import pageage1
import calc
#使用import方式进行导入时,只能跟包名或模块名
from pageage1 import module_A
from pageage1.module_A import a
#使用from……import方式进行导入时,可以导入包、模块、函数、变量
python中常用的内置模块
模块名 | 描述 |
---|---|
sys | 与python解释器及其环境操作相关的标准库 |
time | 提供与时间相关的各种函数的标准库 |
os | 提供了访问操作系统服务功能的标准库 |
calendar | 提供与日期相关的各种函数的标准库 |
urllib | 用于读取来自网上(服务器)的数据标准库 |
json | 用于使用JSON序列化和反序列化对象 |
re | 用于在字符串中执行正则表达式匹配和替换 |
math | 提供标准算术运算函数的标准库 |
decimal | 用于进行精确控制运算精度、有效位数和四舍五入操作的十进制运算 |
logging | 提供了灵活的记录事件、错误、警告和调试信息等日志信息的功能 |
import sys
print(sys.getsizeof(24))#28
print(sys.getsizeof(45))#28
print(sys.getsizeof(True))#28
print(sys.getsizeof(False))#24
import time
print(time.time())#625478159.7243931
print(time.localtime(time.time()))#time.struct_time(tm_year=2021, tm_mon=7, tm_mday=5, tm_hour=17, tm_min=42, tm_sec=39, tm_wday=0, tm_yday=186, tm_isdst=0)
import urllib.request
print(urllib.request.urlopen('http://www.baidu.com').read())
import math
print(math.pi)
5.第三方模块的安装及使用
pip install 模块名
键盘的“windows”+"r"同时按,输入cmd,回车,输入pip install schedule
输入python,回车,输入import schedule回车,如果不报错说明安装成功了
import schedule
import time
def job():
print('哈哈')
schedule.every(3).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
import 模块名
二、文件
1.编码格式
常见的字符编码格式:Python的解释器使用的是Unicode(内存),.py文件在磁盘上使用UTF-8存储(外存)
在python文件最上面添加一行encoding=gbk可以改变默认存储为GBK
不同的编码方式的存储空间是不同的
2.文件的读写原理
文件的读写称为"IO操作"(先进先出)
文件读写操作流程:Python操作文件—>打开或新建文件—>读写文件—>关闭资源
3.文件读写操作
内置函数open()创建文件对象,通过IO流将磁盘文件中的内容与程序中的对象中的内容进行同步
file=open(filename[,mode,encoding])
file:被创建的文件对象
open:创建文件对象的函数
filename:要创建或打开的文件名称
mode:打开模式默认为只读
encoding:默认文本文件中字符的编写格式为gbk
file=open('a.txt','r')#读取格式是一个列表
print(file.readlines())
file.close()
常见的文件打开模式
按文件中数据的组织形式,文件分为文本文件(存储的是普通“字符”文本,默认为unicode字符集,可以使用记事本程序打开)和二进制文件(把数据内容用“字节”进行存储,无法用记事本打开,必须用专用的软件打开,如mps音频文件、jpg图片、doc文档等)
打开模式 | 描述 |
---|---|
r | 以只读模式打开文件,文件的指针将会放在文件的开头 |
w | 以只写模式打开文件,如果文件不存在则创建,如果文件存在则覆盖原有内容,文件的指针放在文件的开头 |
a | 以追加模式打开文件,如果文件不存在则创建,文件的指针放在文件的开头;如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾 |
b | 以二进制模式打开文件,不能单独使用,需要与其它模式一起使用,rb或者wb |
+ | 以读写方式打开文件,不能单独使用,需要与其它模式一起使用,a+ |
file=open('b.txt','w')
file.write('hello,world')
file.close()
file=open('b.txt','w')
file.write('python')
file.close()
file=open('b.txt','a')
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()
4.文件对象常用的方法
方法名 | 说明 |
---|---|
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() | 返回文件指针的当前位置 |
fiush() | 把缓冲区的内容写入文件,但不关闭文件 |
close() | 把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源 |
file=open('a.txt','r')
print(file.read(2))
print(file.readline())
print(file.readlines())
file=open('a.txt','a')
file.write('hello')
file.close()
file=open('a.txt','a')
lst=['java','go','python']
file.writelines(lst)
file.close()
file=open('a.txt','r')
file.seek(2)
print(file.read())
print(file.tell())
file.close()
file=open('c.txt','a')
file.write('hello')
file.flush()
file.write('world')
file.close()
5.with语句(上下文管理器)
with语句可以自动管理上下文资源,不论什么原因跳出with块,都能保证文件正确的关闭,以此来达到释放资源的目的
#print(type(open('a.txt','r')))
with open('a.txt','r') as file:
print(file.read())
#MyContenMgr实现了特殊方法__enter__()、__exit__(),称为该类对象遵守了上下文管理器协议
该类对象的实例对象,称为上下文管理器
class MyContenMgr(object):
def __enter__(self):
print('enter方法被调用执行了')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print('exit方法被调用执行了')
def show(self):
print('show方法被调用执行了')
with MyContenMgr() as file:#相当于file=MyContenMgr()
file.show()
with open('logo.png','rb') as src_file:
with open('copy2logo.png','wb') as target_file:
target_file.write(src_file.read())
6.目录操作
os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。
os模块与os.path模块用于对目录或文件进行操作
#os模块与操作系统相关的一个模块
import os
os.system('notepad.exe')
os.system('calc.exe')
#直接调用可执行文件
os.startfile('C:\\Program Files\\Tencent\\QQ\\Bin\\qq.exe')
函数 | 说明 |
---|---|
getcwd() | 返回当前的工作目录 |
listdir(path) | 返回指定路径下的文件和目录信息 |
mkdir(path[, mode]) | 创建日录 |
makedirs(path1/path2. … [, mode]) | 创建多级目录 |
rmdir(path) | 删除日录 |
removedirs(path1/path2…) | 删除多级目录 |
chdir(path) | 将path设置为当前工作目录 |
import os
print(os.getcwd())
lst=os.listdir('../chap15')
print(lst)
os.mkdir('newdir2')
os.makedirs('A/B/C')
os.rmdir('newdir2')
os.removedirs('A/B/C')
os.chdir('E:\\vippython\\chap14')
print(os.getcwd())
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('demo13.py'))
print(os.path.exists('demo13.py'),os.path.exists('demo18.py'))
print(os.path.join('E:\\Python','demo13.py'))
print(os.path.split('E:\\vippython\\chap15\\demo13.py'))
print(os.path.splitext('demo13.py'))
print(os.path.basename('E:\\vippython\\chap15\\demo13.py'))
print(os.path.dirname('E:\\vippython\\chap15\\demo13.py'))
print(os.path.isdir('E:\\vippython\\chap15\\demo13.py'))
#列出指定目录下的所有.py文件
import os
path=os.getcwd()
lst=os.listdir(path)
for filename in lst:
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)
import os
path=os.getcwd()
lst_files=os.walk(path)
for dirpath,dirname,filename in lst_files:
for dir in dirname:
print(os.path.join(dirpath,dir))
for file in filename:
print(os.path.join(dirpath,file))