模块:实现某个功能的代码集合
模块分为三种:
1.自定义模块(就是自己写的python文件)
2.内置标准模块(标准库)
3.开源模块(第三方提供的)
导入模块的方式:
导入模块,实际上就是,就需要导入的模块,引入到导入地方,运行一遍
导入包:
导包的实质就是将 包下的__init__.py导入
在__init__.py 中导py,需要 使用 from . import 模块名
import customModule as cm #这句话的意思就是 ,将 customModule这个python文件执行一遍,并赋值给 cm from customModule import name #这句话的意思,就是直接将customModule里的name引过来执行以下 # print(cm.name) print(name)
#包下面的__init__.py # Author:zylong from . import customModule as cm print("modelIntroduction====__init__.py")
导包:
# Author:zylong #例如:导入 modeIntroduction这个包 #导包的前提就是需要这个包在python的path中,这里需要使用 os和sys模块 import os,sys BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) #如果在这里引入modelIntroduction包下的所有py,就需要在modelIntroduction的__init__.py中,将包导入 import modelIntroduction print(modelIntroduction.cm.name)
time&datetime
# Author:zylong import time #这个是当前时间的毫秒值 time.time() #暂停几秒 time.sleep(0.1) print(time.ctime()) #Fri Dec 15 09:55:59 2017 #这个就是struct_time 就是时间元组 print(time.gmtime()) #这个返回的是utc的 #time.struct_time(tm_year=2017, tm_mon=12, tm_mday=15, tm_hour=1, tm_min=56, tm_sec=41, tm_wday=4, tm_yday=349, tm_isdst=0) x = time.localtime() print(time.asctime(x)) #Fri Dec 15 01:57:50 2017 print(time.localtime()) #这个返回的是utc-8的 #time.struct_time(tm_year=2017, tm_mon=12, tm_mday=15, tm_hour=9, tm_min=58, tm_sec=35, tm_wday=4, tm_yday=349, tm_isdst=0) print(time.mktime(x)) #1513303240.0 讲元组转为毫秒 print(time.strftime("%Y-%m-%d %H:%M:%S")) print(time.strftime("%Y-%m-%d %H:%M:%S",x)) #2017-12-15 10:03:14 如果不传,就是默认时间,或者可以传一个struct_time print(time.strptime("2017-12-15 10:03:14","%Y-%m-%d %H:%M:%S")) #time.struct_time(tm_year=2017, tm_mon=12, tm_mday=15, tm_hour=10, tm_min=3, tm_sec=14, tm_wday=4, tm_yday=349, tm_isdst=-1) import datetime as dt #datetime 中 有 date支持 年月日 ,time是支持 时分秒的 print("=======================datetime================================") print(dt.datetime.now()) #2017-12-15 10:11:04.201889 这个时间后会再更一个201889 print(dt.datetime.now() + dt.timedelta(days=3)) print(dt.datetime.now() + dt.timedelta(hours=3))
random模块
# Author:zylong #随机数 import random #生产0-1之间的随机数 print(random.random()) #生产[0-3]之间的随机整数 print(random.randint(0,3)) #生产[0-3)之间的整数 ,就是range()函数 print(random.randrange(0,3)) # list = [1,2,3,4] # print(random.choice(list)) lista = [i for i in range(65,91)] listb = [i for i in range(97,123)] listc = [i for i in range(0,10)] lista.extend(listb) lista.extend(listc) print(lista) # a.append(listc) # 65-90 A-Z print(chr(65)) print(chr(90)) #97-122 a-z print(chr(97)) print(chr(122)) #生产一个验证码 a = random.sample(lista,4) for i in range(len(a)): if a[i] > 10: a[i] = chr(a[i]) else: a[i] = str(a[i]) #可以发现 join函数,如果有数字的话不会自动转换(所以需要在列表中进行转换) b = "".join(a) print(b)
os和sys模块
# Author:zylong import os #提供对操作系统进行调用的接口 #获取当前工作目录 print(os.getcwd()) #改变目录 chdir 就是changedir os.chdir("D:\pythonworkspace\oldboy\day5") print(os.getcwd()) # os.curdir print(os.curdir)#返回"." print(os.pardir) # os.makedirs("test/test")#不能重复创建 # os.removedirs("test/test")#不能重复删除(如果目录不为空目录着停止) """ mkdir创建一个目录 rmdir删除一个目录 """ print(os.listdir()) #将当前目录中的test目录或文件更改为 test1 # os.rename("test","test1") #返回这个文件的信息 print(os.stat("test")) #操作系统的分隔符 print(os.sep) #操作系统的 环境变量的分隔符 print(os.pathsep) #操作系统的换行符 os.linesep #===========================sys模块======================================================# import sys,time #输出,这个输入是往后最佳 # for i in range(100): # time.sleep(0.1) # sys.stdout.write("#") # sys.stdout.flush() print(sys.argv) #python的环境变量 sys.path #操作系统名称 sys.platform
hashlib模块:
# Author:zylong import hashlib #这里就是加密使用的库 #1.使用md5 m = hashlib.md5() m.update(b"zhang") print(m.digest()) print(m.hexdigest()) #这个更强的加密 import hmac #参数必须是字节型的 h = hmac.new("张玉龙".encode("utf-8"),"张娟".encode("utf-8")) print(h.hexdigest()) #json 和pickle 在学文件操作的时候学过了
shutil模块:
# Author:zylong #文件,文件夹 的 解压缩和复制处理 import shutil #这个方法是将 内容拷贝到另一个文件中 可以部分内容 (因为这里面传的是两个文件流) # shutil.copyfileobj() #这个是直接copy文件 shutil.copyfile("shutilModule.py","aa") #这个即copy文件又copy权限 # shutil.copy() #就是将制定的文件夹下所有的文件copy到目标文件下 # shutil.copytree("D:/pythonworkspace/oldboy/day5","D:/aa") # shutil.rmtree("D:/aa") #压缩文件和解压 #一般直接使用(make_archive:可以直接对文件或者文件夹压缩),可支持 “zip”, “tar”, “bztar”,“gztar” # shutil.make_archive("D:/pythonworkspace/oldboy/day5/homework.py",‘zip‘) #如果对zip import zipfile #1.压缩 # z = zipfile.ZipFile("zz.zip","w") # z.write("aa") # #这里可以添加多个 # z.write("shutilModule.py") # z.close() #2.解压 # z1 = zipfile.ZipFile("zz.zip","r") # #解压所有 # z1.extractall(path="D:/pythonworkspace/oldboy/day5/") # z1.close() # import tarfile # t = tarfile.open("zz.tar","w") # t.add("D:/pythonworkspace/oldboy/day5/shutilModule/zz.zip") # t.add("D:/pythonworkspace/oldboy/day5/shutilModule/aa") # t.close() # # # 解压 类似zip # tar = tarfile.open(‘zz.tar‘,‘r‘) # tar.extractall() # 可设置解压地址 # tar.close()
xml模块
# Author:zylong import xml.etree.ElementTree as et #xml文档的处理,xml只有一个根节点 xml = et.parse("test.xml") root = xml.getroot() #root.tag 获取的是跟节点 # print(root) # print(root.tag) for tag in root: print(tag.tag,tag.attrib) #如果tag下还有节点,可以再循环进去 #只遍历指定节点(这个节点如论在那一层都可以) for node in root.iter("a"): print(node.text) #修改节点里的值 for node in root.iter("a"): node.text = node.text + "b" #需要文档描述 xml.write("test.xml",encoding="utf-8",xml_declaration=True) #删除 直接就是 # root.remove(节点) #创建xml #设置根节点 et.Element("") et.SubElement("根节点","子节点名称",attrib={"enrolled":"yes"})
re 正则表达式模块:
# Author:zylong #正则表达式 import re string = "a12b43dfa#dafao%pka12498ok" #match就是开头匹配 print(re.match("a",string)) # . 匹配所有字符,+这个字符一次或多次 print(re.search(".+",string)) # $ 字符结尾 # ? 0次或者1次 #{m} 匹配前一个字符m次 #{n,m} 匹配前一个字符 n到m次 # | 匹配左右或者右边的字符 #‘(...)‘ """ ‘\d‘ 匹配数字0-9 ‘\D‘ 匹配非数字 ‘\w‘ 匹配[A-Za-z0-9] ‘\W‘ 匹配非[A-Za-z0-9] ‘s‘ 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 ‘\t‘ """