模块实质就是一个python文件,文件名就是模块名,例如import.py,这个import就是模块名
1.使用模块的好处?
- 大大提高代码的维护性,提供代码的复用性,模块可以被其他地方引用;
- 使用模块可以避免使用相同的变量名和函数名,相同名字的函数和变量名可分布在不同的模块中。
也许这时,你会想如果模块名相同怎么办,这就引入包(Package)的概念,即一种组织模块的方法。
2.包(Package)
包是一个文件夹,是多个模块的集合。举例:有两个模块abc.py和xyz.py,如果这两个模块名与其他模块冲突,可以用包组织模块,也就是按目录存放
引入包后,只要包名称不同,那么模块名就唯一,模块的名称为包.模块,如上图所示,mycompany.abc
包一定要带_init_.py,不然会被当成普通的文件夹。_init_.py可以是空文件,它本身也是模块,模块名为mycompany
3.导入模块
导入模块实质就是把python文件拿来执行一次
常见的导入方式有:
import module import package.module#导入模块 from module import *#导入该模块中的所有方法 from module import fn1,fn2,fn3#导入模块中的方法fn1,fn2.. from module import fn1 as YH #导入模块中的方法fn1,起别名为YH from package import module#1.OSos.rename('password')#给文件重命名
若要a.py文件中使用m3.py中的代码,则需要在a.py中导入m3,方法有from my1 import m3
若要使用m3中的变量,函数,可以具体指定再调用,print(m3.name)、m3.f1()
3.1导入模块顺序
- 先从当前目录下找这个模块
- 在当前目录下找不到,再从python的环境变量中找
注意:python文件名不能与模块名相同,否则会提示没有该模块。因为找模块先从当前目录找,找到一个自己创建的,没有系统自带模块中的方法,so报错了
如何查看python的环境变量?如下图
import sys # sys.path.append(r'E:\自动化测试\LYH_python\Day6作业\my1') print(sys.path)#查看python环境变量 打印结果: ['E:\XX\Day6作业\my2', 'E:\XX\Day6作业', 'E:\XX\python35.zip', 'E:\XX\DLLs', 'E:\XX\lib', 'E:\XX', 'E:\XX\lib\site-packages', 'E:\XX\lib\site-packages\setuptools-23.0.0-py3.5.egg']
如何把不存在的模块加入环境变量中?
第一种:把找不到的模块直接放到python的lib/DLLS等安装目录下
第二种:sys.path返回的是一个列表,可以直接把模块的目录加到环境变量中
import sys sys.path.append(r'E:\自动化测试\LYH_python\Day6作业\my1')#把my1这个目录加到环境变量中
sys.path.insert(0,r'E:\自动化测试\LYH_python\Day6作业\my1')#把my1这个目录加到环境变量最开始的位置,效率高
第三种:选择模块的目录,右键-选择Mark Directory as -Sources Root ,自动将该目录加入环境变量中
注意:如果将最上面一层目录Sources Root,调用下下级目录中的python文件时,要指定,Day6->my1>f1,
import Day6
my1.f1#指定模块下的哪个变量或函数
4.安装第三方模块方法
- pip install XXXX(模块名)
- .whl pip install C://Users/Liuyihan(绝对路径)+XXX.whl(模块名)
- .tar.gz 1.先解压;2解压后在命令行进入到该目录下;3执行python setup.py install
注意:在地址栏直接输入cmd,即可直接进入到该目录下
二、常见模块
1.OS模块
import os
os.rename('password')#给文件重命名
os.remove('password')#删除文件 print(os.getcwd())#获取当前目录 print(os.rmdir('china'))#删除指定文件夹 os.mkdir('china/beijing')#创建一个文件夹,文件夹名称是字符串,mkdir不能创建父级不存在的多层文件夹,会报错 os.makedirs('china/beijing')#递归创建目录,父目录不存在时自动创建父目录 os.removedirs('china/beijing')#只能删除空目录 print(os.listdir('d:\'))#列出指定目录下的所有文件,且返回一个list print(os.listdir())#不指定目录,默认列出当前目录下的所有文件 os.system('dir')#执行操作系统的命令,但不能获取到结果 res=os.popen("ipconfig").read()#执行操作系统的命令,可以获取到结果 print(res) print(os.path.isdir('china'))#判断是否是文件夹 print(os.path.isfile('user.txt'))#判断是否是文件 print(os.path.exists('user.txt'))#判断文件或文件夹是否存在 print(os.path.join('china','beijing','海淀','a.py'))#自动识别系统,windows或linux,自动连接好路径 res=os.path.split(r'chinaeijing海淀a.py')#r表示把路径中的不要当成转义字符,将路径分隔显示
以下程序,学习下os.walk()
#第一种 res=os.walk("china")#一层一层将里面的文件,文件夹列出来,返回一个list for cur_path,dir,file in res: print('当前目录:',cur_path) print('当前目录下的所有文件夹:',dir) print('当前目录下的所有文件',file) print('=========================') # 第二种 找到china目录下的有多少个json文件 res=os.walk("china")#一层一层将里面的文件,文件夹列出来,返回一个list count=0 for cur_path,dir,file in res: for f in file: if f.endswith('.json'): count+=1 print(count) # 第三种 判断某个文件是不是在某目录下 def find_files(path,keyword): res=os.walk(path) for cur_path,dirs,files in res: for file_name in files: if keyword in file_name: print("该文件在该目录下")
2.Random模块
import random print(random.randint(100000,999999)) #随机取一个整数 print(random.uniform(1,900))#取一个小数 stus = ['xiaojun','hailong','yangfan','tanailing','yangyue','cc'] print(random.choice('abcdefg'))#随机取一个元素,返回一个字符串或int print(random.sample(stus,2)) #从一个序列(字符串或列表)中随机取N个元素,返回的是一个list print(random.sample(stus,2)) #从一个序列(字符串或列表)中随机取N个元素,返回的是一个list print(random.shuffle(l))#洗牌,这个就只能传list了
3.Time模块
import time res=time.strftime('%Y%m%d %H:%M:%S')#取当前的格式化日期 res=time.time()#获取当前日期时间戳,默认精确到毫秒,可以转int,可以获取整数 print(res) #格式化时间和时间戳相互转化,都必须先转化成时间元组 time_tuple=time.strptime('1992-01-02','%Y-%m-%d') print(time.mktime(time_tuple))#mktime参数是结构化时间或完整的9位元素元组,返回用秒来表示时间的浮点数 #将格式化时间转化成时间戳的函数 # #不传参数,取当前时间戳 def str_to_timestamp(time_str=None,format='%Y%m%d %H%M%S'): if time_str: time_tuple=time.strptime(time_str,format) timestamp=time.mktime(time_tuple) else: timestamp=int(time.time()) return int(timestamp) # print(str_to_timestamp()) # print(str_to_timestamp('20391123 175123')) print(str_to_timestamp('2018-10-03','%Y-%m-%d')) res=time.gmtime(time.time())#将时间戳转化成时间元组,标准时区、 res=time.localtime(time.time())#将当前时间戳转化成时间元组,取当前时区 res2=time.strftime('%Y-%m-%d %H:%M:%S',res)#将时间元组转化成格式化时间 print(res2) # #将时间戳转化成格式化时间的函数 # #如果没有传参数,就取当前格式化时间 def timestamp_to_str(timestamp=None,format='%Y%m%d %H:%M:%S'): if timestamp: time_tuple=time.localtime(timestamp) str_time=time.strftime(format,time_tuple) else: str_time=time.strftime(format) return str_time