python常用模块
- time
- random
- os
- shutil
- xml
定义:
模块:用来从逻辑上总结Python代码(变量,函数,类,逻辑) 本质是.py结尾的python 文件,实现一个功能
导入方法:
import module_name
import module1_name, module2_name, module3_name..... 使用时需要 module_name.xxx module_name.xxxz()
from module import * #导入所有
from module import m1,m2,m3 可以直接使用变量或者函数
from module_name import 模块的内置方法 as xxx #防止和文件内部的函数名称冲突,给导入的函数起一个别名
本质:
导入模块的本质是把python 文件解释一遍。
路径搜索:import将模块的路径搜索一遍
sys.path
包: 本质是一个文件夹(目录),必须带有一个__init.py__文件。
用来从逻辑上组织模块
导入包的本质就是解释包下面的__init.py__文件
不在同一目录下的包的导入:
现将包内的文件导入init文件内,然后在导入包即可调用
导入优化:
多次调用文件内的方法时,可以直接导入文件的方法,避免多次搜索降低效率
from module import m1,m2,m3
-
标准库(内置模块)
1.time与datetime
格式化的时间字符串表示
时间戳:时间间隔换算成秒 1970年到当前时间之间的秒数 time.time()
元祖(struct_time)共有9个元素 tm_isdst 是否夏令时 tm_wday 一周的第几天 Monday=0
时间戳转换成元祖的两种形式:
time.获取时间戳
time.gmtime()#结果为utc时区
time.localtime()#结果为本地时间(UTC+8)
元祖转换为时间戳:
time.mktime()
元祖转换成格式化字符串:
time.strftime(格式,时间元祖struct_time)#得到的结果是所定义格式的时间字符串
格式化字符串转换成元祖:
time.strptime(格式化的字符串,格式)#得到元祖 二者需要一一对应
import datetime
datetime.datetime.now()打印当前时间
-
1 __author__ = 'zhangxq' 2 import time 3 4 time.time() 5 time.timezone 6 print(time.gmtime())#当前时间戳转换成元祖,不传变量默认返回本地时间的标准时间UTC(与当前设备时差八个小时)。传参返回的也是UTC 7 #转换成本地时间 8 print(time.localtime())#当前时间戳转换成元祖,本地时间 9 print(time.localtime(122222222))#字符单位是秒,在1970的基础上过了122222222秒 10 #print(122222222/3600/24/365) 11 x = time.localtime(12222222) 12 print(x.tm_year) 13 # 14 # print(help(x)) 15 16 print(time.mktime(x))#元祖转换为时间戳 17 #print(1549978929.0/3600/24/365+1970) 18 print(time.strftime('%Y-%m-%d %H:%M:%S',x))#元祖转换成格式化的字符 19 print(x)#x仍旧是元祖 20 #格式化字符串转换成元祖 21 print(time.strptime('1970-05-22 19:03:42','%Y-%m-%d %H:%M:%S'))#此处返回结果就是元祖x 22 23 print(time.asctime())#转换成固定格式,接收的参数是元祖struct_time 24 time.ctime()#转换成固定格式,不传参则为本地时间,接收的参数是时间戳 Timestamp 25 26 import datetime 27 datetime.date 28 datetime.time 29 print(datetime.datetime.now()) 30 datetime.datetime.now()+datetime.timedelta(+3)#当前时间+3天,三天后的时间 hours = 3 hours =- 3
-
开源模块(第三方模块)
-
自定义模块
random模块
1 __author__ = 'zhangxq' 2 import random 3 print(random.random())#随机0-1之间的数 4 print(random.randint(1,3))#随机1到3的整数 5 print(random.randrange(1,3))#随机1到2之间的数,不包含3 6 print(random.choice('hello'))#传入的参数是序列,列表字符串元祖,从序列中随机取值 7 print(random.sample('hello',2))#前面是序列类型,后面可以对序列取长度(随机取长度范围内的任意元素 ) 8 print(random.uniform(1,3))#指定1到3之间的随机浮点数 9 10 a = [1,2,3,4,5,6] 11 random.shuffle(a)#洗牌功能,将列表a中的元素打乱 12 print(a)
os模块
Linux只要以“/”开头的路径就是绝对路径
windows的绝对路径与分区有关
1 __author__ = 'zhangxq' 2 import os 3 # print(os.getcwd())#获取当前的操作目录 4 # #print(os.chdir('c:\\Users'))#切换目录,避免和转义字符之间混淆,将路径的的\修改为\\ 5 # #print(os.chdir(r'C:\Users\Administrator'))#切换目录,避免和转义字符之间混淆,前面加r 6 # os.curdir #返回当前目录 7 # os.pardir#返回上一级目录 8 # os.makedirs(r'c:\a\b\c')#递归的创建出一个系统目录层层创建 9 # os.removedirs(r'c:\a\b\c')#清除目录,如果目录为空,则递归到上一层,上一层还为空,继续递归。结束条件:文件夹不为空//将当前指定目录全部清除 作用:清除空文件夹 10 # os.mkdir()#创建目录,不能递归创建,只能单层创建 11 # os.rmdir()#清除目录,只清除一层,不能递归清除 12 # os.listdir()#列出目录下包含的所有文件 13 # print(os.listdir(r'd:')) 14 # os.remove(r'c:\a\b\1.txt')#删除文件 15 # os.renames('oldpath','newpathname')#重命名 old,new #os.rename() 16 #os.stat()#获取文件/目录的信息(属性) 17 #os.sep #路径分隔符 18 #os.linesep #换行分隔符 输出当前平台使用的行终止符 19 #os.pathsep #输出用于分割当前文件路径的字符串 20 #os.environ #查看当前系统的环境变量 21 # os.name #当前系统名 ‘nt’代表windows 22 # os.system('')#执行命令 dir ipconfig /all 23 # os.path.abspath()#获取某个文件的绝对路径 24 25 #不考虑路径是否真实存在 26 # os.path.split(r'c:\a\b\1.txt')#分割, 此处将文件分隔成两部分,(文件所在的目录,文件名),返回二元组的形式 27 os.path.dirname(r'c:\a\b\1.txt')#取目录 28 os.path.basename(r'c:\a\b\1.txt')#取路径最里层(1.txt) os.path.basename(r'c:\a\b')#取路径最里层(b) 29 os.path.exists()#判断输入的路径是否存在 30 os.path.isabs()#判断是否是绝对路径 31 os.path.isfile()#判断是否是文件 32 os.path.join(r'c:',r'\a',r'\b',r'\1.txt')#组合返回,第一个绝对路径之前的的参数将被忽略 33 os.path.getatime()#获取最后存储时间 34 os.path.getmtime()#获取修改存储时间
shutil模块
高级的文件,文件夹,压缩包处理模块
1 __author__ = 'zhangxq' 2 import shutil 3 #shutil对压缩包的处理实质上是调用zipfile和tarfile两个模块来进行的 4 5 #import pickle 6 import json 7 # info = { 8 # 'title':'shuitl_test', 9 # 'name':'张xq', 10 # 'age':24, 11 # 'job':'IT' 12 # } 13 # # a = print(sorted(info.items()))#给字典排序 14 # f1 = open('f1_test','w',encoding='utf-8')#,encoding='utf-8') 15 # #sorted(info.items(),key=lambda x:x[1]) 16 # f1.write(json.dumps(info)) 17 # f1.close() 18 # 19 # 20 # f2 = open('f1_test',encoding='utf-8') 21 # f3 = open('f2_test','w',encoding='utf-8') 22 # 23 # shutil.copyfileobj(f2,f3)#copy文件 ,不需要定义f3, shutil.copyfile('f1_test','f3_test'),直接进行文件之间的copy 24 25 # shutil.copymode() #仅拷贝权限,用户,组,内容均不变 26 # shutil.copystat()#拷贝状态的信息(所有信息)???权限 27 # shutil.copy()#拷贝文件和权限 28 # shutil.copy2()#同时拷贝文件和状态信息 29 # shutil.copytree('time_test','time_newtest')#递归的拷贝文件 30 # shutil.rmtree()#递归的删除文件 31 # shutil.move()#递归的移动文件 32 33 #shutil.make_archive(base_name,format,...)#创建压缩包并返回文件路径 如:zip,tar 34 35 #base_name:压缩包的文件名,也可以是压缩包的路径,只是文件名时,则保存在当前目录,否则保存在指定路径 36 #format:压缩包种类 'zip' 'tar' 'bztar' 'gztar' 37 #root_dir:要压缩的文件路径 38 #owner:用户,默认的当前用户 39 #group:组:默认当前组 40 #logger:用来记录日志,通常使用logging.logger对象 41 42 43 #压缩的单个文件 44 import zipfile 45 z = zipfile.ZipFile('day5.zip','w') 46 z.write('random_test.py') 47 print('----------') 48 z.write('f1_test') 49 #解压 50 z = zipfile.ZipFile('day5.zip','m') 51 z.extractall()#解压 52 z.close() 53 54 55 56 57 58 59 60 ``
xml处理模块
实现不同语言或程序之间进行数据交换的协议。
xml的格式如下,就是通过<>节点来区别数据结构的:
1 __author__ = 'zhangxq' 2 #Python处理xml文件 3 # 4 import xml.etree.ElementTree as ET 5 6 7 import xml.etree.ElementTree as ET 8 #xml文件的读取 9 tree = ET.parse("xml_test.xml") 10 root = tree.getroot() 11 #print(root) 内存地址 12 print(root.tag) 13 #遍历xml文档 14 for child in root:#遍历整个xml文档 15 print(child.tag, child.attrib)#child.tag ==country child.attrib ==country 里面的属性 16 for i in child: #循环标签里面的属性 17 print(i.tag,i.text,i.attrib) 18 #只遍历year 节点 19 for node in root.iter('year'): 20 print(node.tag,node.text)
1 __author__ = 'zhangxq' 2 import xml.etree.ElementTree as ET 3 tree = ET.parse("xmltest.xml") 4 root = tree.getroot()#获取到文件 5 #修改 6 for node in root.iter('year'): 7 new_year = int(node.text) + 1#text获取文本 8 node.text = str(new_year) 9 node.set("updated","yes")#给year添加属性 10 tree.write("xmltest.xml")#写回原文件 11 #删除node 12 for country in root.findall('country'):#可以将所有的country都find出来 13 rank = int(country.find('rank').text) 14 if rank > 50: 15 root.remove(country) 16 17 tree.write('output.xml')
1 __author__ = 'zhangxq' 2 import xml.etree.ElementTree as ET 3 new_xml = ET.Element("namelist") 4 personinfo= ET.SubElement(new_xml,"personinfo",attrib={"enrolled":"yes"}) 5 age = ET.SubElement(personinfo,"age",attrib={"checked":"no"}) 6 name = ET.SubElement(personinfo,"name") 7 name.text = 'zhang' 8 sex = ET.SubElement(personinfo,"sex") 9 sex.text ='女' 10 age.text = '33' 11 personinfo2 = ET.SubElement(new_xml,"personinfo2",attrib={"enrolled":"no"}) 12 name2 = ET.SubElement(personinfo2,"name2") 13 name2.text = 'lixiaolong' 14 age = ET.SubElement(personinfo2,"age") 15 age.text = '19' 16 et = ET.ElementTree(new_xml) #生成文档对象 17 et.write("test.xml", encoding="utf-8",xml_declaration=True) 18 ET.dump(new_xml) #打印生成的格式
所生成的xml文件格式表现如下:
1 <?xml version='1.0' encoding='utf-8'?> 2 <namelist> 3 <personinfo enrolled="yes"> 4 <age checked="no">33</age> 5 <name>zhang</name> 6 <sex>女</sex> 7 </personinfo> 8 <personinfo2 enrolled="no"> 9 <name2>lixiaolong</name2> 10 <age>19</age> 11 </personinfo2> 12 </namelist>
re模块
正则表达式:用来匹配字符串
1 __author__ = 'zhangxq' 2 import re 3 res1 = re.match('^Z.+','Zhang') 4 res2 = re.match('Z.+a','Zhang123Xiao144Qing666')#匹配到最后一个a 5 res2s = re.match('Z.+a$','Zhang123Xiao144Qing666')#$用来验证字符串的最后一个字符是否是a 6 res3 = re.match('Zhang\d','Zhang123Xiao144Qing666')# 7 res4 = re.match('Zhang\d+','Zhang123Xiao144Qing666')# 8 print(res2s) 9 re.search('aal?','aal123qwer11aa')#匹配前一个字符1次或0次,(此处匹配aal的前两个字符或所有) 10 res5 = re.search('[0-9]{2}','aal123qwer11aa')#匹配前一个字符m次 11 res5 = re.search('[0-9]{1,3}','6aal123qwer11aa')#匹配前一个字符m次 12 print(res5) 13 print(re.findall("[0-9]{1,3}","aal123qwer11aa"))# 把所有匹配到的字符放到以列表中的元素返回 14 print(re.search('abc|ABC','6abcABCaal123qwer11aa').group())#返回abc 15 print(re.search('abc|ABC','6ABCabcABCaal123qwer11aa').group())#返回ABC 16 print(re.findall('abc|ABC','6abcABCaal123qwer11aa')) 17 18 print(re.search("(?P<id>[a-z]{3})(?P<paassord>[0-9]{2})","aacb111zhang1234").groupdict("id"))#生成字典 19 20 print(re.split('[0-9]','abc12def1gH4i'))#分割 21 print(re.split('[0-9]+','abc12def1gH4i'))#分割 22 print(re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city")) 23 24 替换sub 25 print(re.sub("[0-9]","6","111zhang222xiao333qing",count=2))#将0-9范围内的数字替换成6,count设置替换的个数 26 27 28 print(re.search("[a-z].+","abcdeFG",flags=re.I))#flags=re.I 匹配时忽略大小写 29 print(re.search("[a-z]+","abcdeFG1234",flags=re.I))#flags=re.I 匹配时忽略大小写 与上面输出结果相同 30 31 print(re.search(r'^a','aaZhang')) 32 print(re.search(r'^a','\naaZhang',flags=re.M))#当需要匹配的字符串前面有转义字符时,不能正确匹配。此时使用flags=re.M(即flags=re.MULTILINE) 33 print(re.search(r'.+','\naaZhang',flags=re.S))#点任意匹配模式,改变'.'的行为,可以匹配\n 34 class Role: 35 def __init__()#实例化类,进行传参使用__init__()方法 构造函数,在实例化时做一些类的初始化的工作