python之模块

模块实质就是一个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'china\beijing\海淀\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

 

posted @ 2018-09-29 23:07  Balllyh  阅读(335)  评论(0)    收藏  举报