常用的基础模块介绍

模块,是用一堆代码来实现某个功能的代码集合类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码来调用该功能,提供了代码的重用性和代码间的耦合性而对于一个复杂的功能,可能需要多个函数才能完成,这些文件组成的代码集合称为模块模块分为三种:自定义模块;内置标准模块;开源模块模块一:datetime和time

 1 import time
 2 print("返回标准时间(含年月日等信息):",time.asctime())
 3 print("返回本地时间的struct time时间格式:",time.localtime())
 4 print("返回utc的struct时间对象格式:",time.gmtime(time.time()-800000))
 5 print("返回标准时间格式:",time.asctime(time.localtime()))
 6 print("返回标准时间格式:",time.ctime())
 7 # #
 8 # # #将日期字符串转换成时间戳
 9 string2_struct=time.strptime("2016/10/22","%Y/%m/%d")
10 print("将日期字符串转换成struct格式:",string2_struct)
11 # #
12 struct_2_stamp=time.mktime(string2_struct)
13 print("将struct转换成时间戳:",struct_2_stamp)
14 # #
15 # # #将时间戳转换为字符串
16 print(time.gmtime(time.time()-86640))  #将utc时间戳转换成structtime格式
17 print(time.altzone)
18 # #
19 # # #将utc struct_time 格式转成指定的字符串格式  格式化时间格式
20 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()))
21 # #
22 # #
23 # # #datetime
24 import datetime
25 print("返回系统当前时间:",datetime.datetime.now())
26 print("标准格式;",datetime.datetime.fromtimestamp(time.time()))
27 # # #时间加减
28 print("当前时间加三天:",datetime.datetime.now()+datetime.timedelta(3))
29 print("当前时间减三天:",datetime.datetime.now()+datetime.timedelta(-3))
30 print("当前时间加三小时:",datetime.datetime.now()+datetime.timedelta(hours=3))
31 print("当前时间加30分钟:",datetime.datetime.now()+datetime.timedelta(minutes=30))
32 # #
33 # # #时间替换,即对现有时间的修改
34 c_time=datetime.datetime.now()
35 print(c_time.replace(minute=3,hour=2))

模块二:random 随机数

 1 import random
 2 print(random.randint(1,2))
 3 print(random.randrange(1,3))
 4 # #
 5 # # #生成随机验证码
 6 checkcode=""
 7 for i in range(4):
 8     current=random.randrange(0,4)
 9     if current!=i:
10         temp=chr(random.randint(65,90))
11     else:
12         temp=random.randint(0,9)
13     checkcode+=str(temp)
14 print("验证码为:",checkcode)
15 # #
16 # # # print("生成65-90之间的随机数:",random.randint(65,90))
17 # # # print("根据ASCII码转换:",chr(random.randint(65,90)))

模块三:os模块:用于提供系统级别的操作

 1 import random
 2 print(random.randint(1,2))
 3 print(random.randrange(1,3))
 4 # #
 5 # # #生成随机验证码
 6 checkcode=""
 7 for i in range(4):
 8     current=random.randrange(0,4)
 9     if current!=i:
10         temp=chr(random.randint(65,90))
11     else:
12         temp=random.randint(0,9)
13     checkcode+=str(temp)
14 print("验证码为:",checkcode)
15 # #
16 # # # print("生成65-90之间的随机数:",random.randint(65,90))
17 # # # print("根据ASCII码转换:",chr(random.randint(65,90)))

 1 os.getcwd()                 获取当前工作目录,即当前python脚本工作的目录路径
 2 os.chdir("dirname")         改变当前脚本工作目录;相当于shell下cd
 3 os.curdir                   返回当前目录: (‘.‘)
 4 os.pardir                   获取当前目录的父目录字符串名:(‘..‘)
 5 os.makedirs(‘dir1/dir2‘)    可生成多层递归目录
 6 os.removedirs(‘dirname1‘)   若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
 7 os.mkdir(‘dirname‘)         生成单级目录;相当于shell中mkdir dirname
 8 os.rmdir(‘dirname‘)         删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
 9 os.listdir(‘dirname‘)       列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
10 os.remove()                 删除一个文件
11 os.rename("oldname","new")  重命名文件/目录
12 os.stat(‘path/filename‘)    获取文件/目录信息
13 os.sep                      操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
14 os.linesep                  当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
15 os.pathsep                  用于分割文件路径的字符串
16 os.name                     字符串指示当前使用平台。win->‘nt‘; Linux->‘posix‘
17 os.system("bash command")   运行shell命令,直接显示
18 os.environ                  获取系统环境变量
19 os.path.abspath(path)       返回path规范化的绝对路径
20 os.path.split(path)         将path分割成目录和文件名二元组返回
21 os.path.dirname(path)       返回path的目录。其实就是os.path.split(path)的第一个元素
22 os.path.basename(path)      返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
23 os.path.exists(path)        如果path存在,返回True;如果path不存在,返回False
24 os.path.isabs(path)         如果path是绝对路径,返回True
25 os.path.isfile(path)        如果path是一个存在的文件,返回True。否则返回False
26 os.path.isdir(path)         如果path是一个存在的目录,则返回True。否则返回False
27 os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
28 os.path.getatime(path)      返回path所指向的文件或者目录的最后存取时间
29 os.path.getmtime(path)      返回path所指向的文件或者目录的最后修改时间

模块四:sys  用来提供解释器的相关操作

1 import sys   #用来提供对解释器的相关操作
2 print("返回模块的搜索路径,初始化时使用环境变量的值:",sys.path)
3 print(sys.argv)  #命令行参数list,第一个元素是程序本身路径

 1 import sys
 2 import time
 3
 4
 5 def view_bar(num, total):
 6     rate = float(num) / float(total)
 7     rate_num = int(rate * 100)
 8     r = ‘\r%d%%‘ % (rate_num, )
 9     sys.stdout.write(r)
10     sys.stdout.flush()
11
12
13 if __name__ == ‘__main__‘:
14     for i in range(0, 100):
15         time.sleep(0.1)
16         view_bar(i, 100)

模块五:hashlib  用于加密相关的 操作,提供了MD5和Sha模块,主要提供SHA1/SHA224/SHA256/SHA384/SHA512/MD5算法

 1 import hashlib
 2 m=hashlib.md5()
 3 m.update(b"Hello")
 4 print("二进制格式加密:",m.digest())
 5 print("十六进制加密:",m.hexdigest(),len(m.hexdigest()))
 6
 7 #sha1
 8 s1=hashlib.sha1()
 9 s1.update(b"Hello world")
10 print("SHA1:",s1.hexdigest(),len(s1.hexdigest()))
11
12 s2=hashlib.sha224()
13 s2.update(b"Hello world")
14 print("SHA224:",s2.hexdigest(),len(s2.hexdigest()))
15
16 s3=hashlib.sha256()
17 s3.update(b"Hello world")
18 print("SHA256:",s3.hexdigest(),len(s3.hexdigest()))
19
20 s4=hashlib.sha384()
21 s4.update(b"Hello world")
22 print("SHA384:",s4.hexdigest(),len(s4.hexdigest()))
23
24 s5=hashlib.sha512()
25 s5.update(b"Hello world")
26 print("SHA512:",s5.hexdigest(),len(s5.hexdigest()))
27 # # #由上述例子可以看出,不同的加密算法位数是不一样的,随着指数的增大,加密位数越来越多
28 # # #但是上述方法的加密可以通过撞库来反解,可以通过对加密算法添加自定义key来加密
29 m2=hashlib.md5(b"8jindeod098")
30 m2.update(b"Hello")
31 print("自定义参数加密:",m2.hexdigest())
32 # #
33 # # #更加牛逼的加密方式  内部对我们创建key和内容再进行处理后然后再加密
34 import hmac
35 h=hmac.new(b"Eric")
36 h.update(b"Hello world")
37 print("HMac:",h.hexdigest())

 1 #生成随机验证码的函数
 2 def code():
 3     _code = list()
 4     for i in range(4):
 5         ra = random.randrange(4)
 6         if i == ra:
 7             _code.append(chr(random.randrange(97, 122)))
 8         else:
 9             _code.append(str(i))
10     result = ‘‘.join(_code)
11     return result
12 print("123:",code())

模块六:pickle,json

 1 import pickle,json
 2 data={"k1":123,"k2":"Hello"}
 3 # # #pickle.dumps将数据通过特殊的形式转换为只有python语言认识的字符串
 4 p_str=pickle.dumps(data)
 5 print(p_str)
 6 ss=pickle.loads(p_str)
 7 print("111",ss)
 8 # #
 9 # # #pickle.dump将数据通过特殊形式转换为只有python认识的字符串,并写入文件
10 with open("result.pk","w") as f:
11     pickle.dump(data,f)
12 # #
13 import json
14 # # #json.dumps 将数据通过特殊的形式转换为所有程序语言都认识的字符串
15 j_str=json.dumps(data)
16 print(j_str)
17 # #
18 # # #json.dump将数据通过特殊形式转换为只有python认识的字符串,并写入文件
19 with open("result.json","w") as fp:
20     json.dump(data,fp)

 1 import json,pickle
 2 #json 用于【字符串】和【python】基本数据类型之间的转换
 3 #pickle  用于【python特有的类型】和【python基本数据类型之间的转换】
 4 data={"k1":123,"k2":"Hello"}
 5 p_str=pickle.dumps(data)
 6 print("pickle.dumps:",type(p_str),p_str)  #转换为字节类型
 7 #dump将数据通过特殊的形势转换为只有python语言认识的字符串,并写入文件
 8 with open("dump.pk","wb") as fp:
 9     pickle.dump(data,fp)
10
11 #json.dumps将数据通过特殊的形式转换为所有语言都认识的字符
12 j_str=json.dumps(data)
13 print("json.dumps:",j_str,type(j_str))  #转换为字符串类型
14
15 #json.dump将数据通过特殊的形式转换为所有语言都认识的字符,并写入文件
16 with open("json.pk","w") as fj:     #字符串可以直接写入
17     json.dump(data,fj)

模块七:正则表达式  re

 1 import re
 2 # # #正则表达式相关操作
 3 print()
 4 print("--------------------分隔符----------------------")
 5 origin = "hel1lo al2ex b1cd ab3cd lge acd 19"
 6 r=re.match("\w+",origin)   #从头开始匹配,匹配成功返回一个对象,不成功返回NONE
 7 print("获取匹配的所有结果:",r.group())
 8 #分组:提取匹配成功的指定内容(先匹配成功全部正则,再匹配成功的局部内容提取出来)
 9 print("获取匹配的分组结果:",r.groups())
10
11 #浏览整个字符串去匹配第一个,未匹配成功返回None
12 r=re.search("\d+",origin)
13 print("浏览整个字符串,匹配第一个:",r.group())
14 #获取非重复的匹配列表,如果有一组则用列表形式返回
15 r=re.findall("\d+",origin)
16 print(r)
17 #替换匹配成功指定位置的字符串
18 r=re.sub("\d+","8888",origin,1)
19 print("替换匹配成功指定位置的字符串:",r)
20
21 #split  根据正则匹配分割字符串
22 r=re.split("\d+",origin)
23 print("split:",r)
24
25 origin1 = "hello alex bcd alex lge alex acd 19"
26 r1 = re.split("(alex)", origin1, 1)
27 print("用alex来拆分,但是保留Alex:",r1)
28 r2 = re.split("(al(ex))", origin1, 1)
29 print("用alex或ex来拆分,但是均保留:",r2)
30
31 #匹配IP地址
32 str_ip="Hello,222.168.16.60,Welcome,13783417293,[email protected]"
33 m=re.search("((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)",str_ip)
34 print("匹配到的IP是:",m.group())
35 m1=re.search("(1)([358]\d{9})",str_ip)
36 print("匹配到的电话为:",m1.group())
37 m2=re.search("[a-zA-Z0-9_-][email protected][a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+",str_ip)
38 print("匹配到的邮箱是:",m2.group())

模块八:configparser用于处理特定格式的文件,其本质是利用open来操作文件

 1 import configparser
 2 config=configparser.ConfigParser()
 3 config.read("Hello world",encoding="utf-8")
 4 ret=config.sections()
 5 print("获取所有的节点:",ret)
 6
 7 #获取指定节点下的键值对
 8 ret1=config.items("sections1")
 9 print("获取sections1下的键值对:",ret1)
10 #获取制定节点下的所有键
11 ret2=config.options("sections1")
12 print(ret2)
13 #获取指定节点下指定key值
14 v=config.get("section1","k1")
15 print(v)
16
17 # 检查、删除、添加节点
18 has_sec=config.has_section("section1")
19 print("是否存在节点:",has_sec)
20
21 #添加节点
22 config.add_section("sect1")
23 config.write(open("Hello","w"))
24 ret=config.sections()
25 print("查看节点是否添加成功:",ret)
26
27 #删除节点
28 config.remove_section("sect1")
29 config.write(open("Hello","w"))
30 ret=config.sections()
31 print("查看节点是否删除成功:",ret)
32
33 #检查、删除、设置指定组内的键值对
34 #检查是否存在键:k1
35 has_opt=config.has_option("sect1","k1")
36 print(has_opt)
37
38 #删除指定节点下的指定键
39 config.remove_option("sect1","k1")
40 config.write(open("Hello","w"))
41
42 #设置指定节点下的键值对
43 config.set("sect1","k10","123")
44 config.write(open("Hello","w"))

模块九:XML是实现不同语言或程序之间进行数据交换的协议

  1 # #XML是实现不同语言或程序之间进行数据交换的协议
  2 #1、解析XML
  3 from xml.etree import ElementTree as ET
  4 #打开文件,读取XML内容,xo为xml文件
  5 str_xml=open("xo","r").read()
  6 # #将字符串解析成xml特殊对象,root代指xml文件的根节点
  7 root=ET.XML(str_xml)
  8 print(root)
  9 #
 10 # #直接解析xml文件
 11 tree=ET.parse("xo")
 12 # #获取xml文件的根节点
 13 root1=tree.getroot()
 14 print(root1)
 15 #
 16 # #遍历xml文档的所有内容
 17 # #顶层标签
 18 print("获取顶层节点:",root1.tag)
 19 #遍历xml文档的第二层
 20 for child in root1:
 21     #第二层节点的标签名和标签属性
 22     print(child.tag,child.attrib)
 23     #遍历xml 文档的第三层
 24     for i in child:
 25         print(i.tag,i.text)
 26
 27
 28 #遍历xml中指定的节点year
 29 for node in root1.iter("year"):
 30     print(node.tag,node.text)
 31
 32 #修改节点的内容,由于修改节点时,均是在内存中进行,其不会影响文件中的内容
 33 #因此如果需要修改,则需要将重新将内存中的文件写入到文件
 34
 35 for node in root1.iter("year"):
 36     #将year节点中的内容自增1
 37     new_year=int(node.text)+1
 38     node.text=str(new_year)
 39     #设置属性
 40     node.set("name","eric")
 41     node.set("age","99")
 42     #删除属性
 43     del node.attrib["name"]
 44 #
 45 #     #保存文件
 46 tree=ET.ElementTree(root1)
 47 tree.write("newnew.xml",encoding="utf-8")
 48 #
 49 for country in root1.findall("country"):
 50     #获取每一个country节点下rank节点的内容
 51     rank=int(country.find("rank").text)
 52     print(rank)
 53
 54     if rank>50:
 55         root1.remove(country)
 56 #
 57 # #保存文件
 58 tree=ET.ElementTree(root1)
 59 tree.write("new1.xml",encoding="utf-8")
 60
 61 #创建XML文档
 62 #创建根节点
 63 root2=ET.Element("family")
 64 #创建节点子节点
 65 son1=ET.Element("son",{"name":"son1"})
 66 son2=ET.Element("son",{"name":"son2"})
 67 #在第一个子节点中创建两个孙节点
 68 grandson1=ET.Element("grandson",{"name":"111"})
 69 grandson2=ET.Element("grandson",{"name":"222"})
 70 son1.append(grandson1)
 71 son1.append(grandson2)
 72
 73 #将子节点添加到根节点中
 74 root2.append(son1)
 75 root2.append(son2)
 76
 77 tree=ET.ElementTree(root2)
 78 tree.write("create1.xml",encoding="utf-8",short_empty_elements=False)
 79
 80 #创建xml文档方法二
 81 root=ET.Element("family")
 82 #创建子节点,调用根节点的makeelementff
 83 son1=root.makeelement("son1",{"name":"son1"})
 84 son2=root.makeelement("son2",{"name":"son2"})
 85
 86 #在son1中创建两个孙子节点
 87 grandson11=son1.makeelement("grandson11",{"name":"555"})
 88 grandson12=son1.makeelement("grandson12",{"name":"666"})
 89
 90 son1.append(grandson11)
 91 son1.append(grandson12)
 92
 93 root.append(son1)
 94 root.append(son2)
 95
 96 tree1=ET.ElementTree(root)  #生成文档对象
 97 tree1.write("create2.xml",encoding="utf-8",short_empty_elements=False)  #将文档对象写入文件
 98
 99 #创建xml文档方法三
100 #利用ET的SubElement方法进行创建
101 root=ET.Element("family")   #创建根节点
102 #创建第一个子节点
103 son1=ET.SubElement(root,"son1",attrib={"name":"son111"})
104 son2=ET.SubElement(root,"son2",attrib={"name":"son222"})
105
106 #在第一个子节点中创建孙节点
107 grandson1=ET.SubElement(son1,"grandson11",attrib={"name":"grandson666"})
108 grandson1.text="孙子"
109 et=ET.ElementTree(root)
110 et.write("test.xml",encoding="utf-8",xml_declaration=True,short_empty_elements=False)
111
112 #由上述例子的执行结果来看,均无法实现xml的缩进,若想要缩进的话,需要修改保存格式
113 from xml.dom import minidom
114 def prettify(elem):
115     """
116     将节点转换成字符串,并添加缩进
117     :param elem:要转换的对象
118     :return:
119     """
120     rough_string=ET.tostring(elem,"utf-8")
121     reparsed=minidom.parseString(rough_string)
122     return reparsed.toprettyxml(indent="\t")
123 #利用ET的SubElement方法进行创建
124 root=ET.Element("family")   #创建根节点
125 #创建第一个子节点
126 son1=ET.SubElement(root,"son1",attrib={"name":"son111"})
127 son2=ET.SubElement(root,"son2",attrib={"name":"son222"})
128
129 #在第一个子节点中创建孙节点
130 grandson1=ET.SubElement(son1,"grandson11",attrib={"name":"grandson666"})
131 grandson1.text="孙子"
132
133 raw_str=prettify(root)
134 with open("test2.xml","w",encoding="utf-8") as f:
135     f.write(raw_str)

模块十:urllib和requests

 1 import urllib.request
 2 #python标准库中提供了:urllib等模块以供http请求,但是,他的API太渣,他是为另一个时代、另一个互联网
 3 #创建的,他需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务
 4 #发送get请求
 5 f=urllib.request.urlopen("http://www.qq.com")
 6 result=f.read()
 7 print(result)
 8
 9 #发送携带请求头的GET请求
10 req=urllib.request.Request("http://www.qq.com")
11 req.add_header("QQ","http://www.baidu.com")
12 r=urllib.request.urlopen(req)
13 result=r.read()
14 print(result)
15
16 #Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从
17 # 而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作。
18 #get和post的区别
19 #get:获取服务器的信息,而不进行修改;是安全的和幂等的,例如新闻的读取
20 #post:可能改变服务器上的资源;例如对新闻的评论就是用post
21 import requests
22 ret=requests.get("http://www.qq.com")
23 print(ret.url)
24 print(ret.text)
25
26 payload={"key1":"value1","key2":"value2"}
27 ret=requests.get("http://sports.qq.com/nba/",params=payload)
28 print(ret.url)
29 print(ret.text)
30
31 #基本post实例
32 payload={"key1":"value1","key2":"value2"}
33 ret=requests.post("http://sports.qq.com/a/20161027/023124.htm",data=payload)
34 print(ret.text)
35
36 import json
37 url="http://sports.qq.com/a/20161027/023124.htm"
38 payload={"some":"data"}
39 headers={‘content-type‘: ‘application/json‘}
40 ret=requests.post(url,data=json.dumps(payload),headers=headers)
41 print(ret.text)
42 print(ret.cookies)
43
44 #检测QQ是否在线
45 import urllib
46 import requests
47 from xml.etree import ElementTree as ET
48 r=requests.get("http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=172560199")
49 result=r.text
50 print(result)
51 # #解析xml格式的内容
52 node=ET.XML(result)
53 print(node.text)
54 # #获取内容
55 if node.text=="Y":
56     print("在线")
57 else:
58     print("离线")
59
60 #查看火车停靠信息
61 r=requests.get("http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getDetailInfoByTrainCode?TrainCode=G651&UserID=")
62 result=r.text
63 print(r.text)
64 # #解析xml格式内容
65 root=ET.XML(result)
66 print(root.text)
67 for node in root.iter("TrainDetailInfo"):
68     print(node.find("TrainStation").text)
69     print("到达时间:",node.find("ArriveTime").text,"发车时间:",node.find("StartTime").text)
70
71 #查询手机号归属地
72 r=requests.get("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=13783417293&UserID=")
73 result=r.text
74 print(result)
75 node=ET.XML(result)
76 print(node.text)

模块十一:logging 用于便捷记录日志且线程安全的模块

 1 import logging
 2 logging.basicConfig(filename="log.log",
 3                     format="%(asctime)s-%(name)s-%(levelname)s-%(module)s:%(message)s",
 4                     datefmt="%Y-%m-%d %H:%M:%S %p",
 5                     level=10)
 6 logging.debug("debug")
 7 logging.info("info")
 8 logging.warning("warning")
 9 logging.error("error")
10 logging.critical("critical")
11 logging.log(10,"log")
12 #上述记录日志的功能,只能讲日志记录在单文件中,如果想要设置多个日志文件,上述方法无法完成,需要自定义文件和日志操作对象
13 #定义文件
14 file_1=logging.FileHandler("l1.log","a",encoding="utf-8")
15 fmt=logging.Formatter(fmt="%(asctime)s-%(name)s-%(levelname)s-%(module)s:%(message)s")
16 file_1.setFormatter(fmt)
17
18 file_2=logging.FileHandler("l2.log","a",encoding="utf-8")
19 fmt=logging.Formatter()
20 file_2.setFormatter(fmt)
21 #
22 # #定义日志
23 logger1=logging.Logger("s1",level=logging.ERROR)
24 logger1.addHandler(file_1)
25 logger1.addHandler(file_2)
26 #
27 # #写日志
28 logger1.critical("2222")
29
30 file_21=logging.FileHandler("l3.log","a",encoding="utf-8")
31 fmt=logging.Formatter()
32 file_21.setFormatter(fmt)
33
34 logger2=logging.Logger("s2",level=logging.INFO)
35 logger2.addHandler(file_21)
36 logger2.critical("6666")

模块十二:shutil 高级的文件、文件夹、压缩包处理模块

 1 import shutil
 2 #将一个文件的内容拷贝到另一个文件中
 3 shutil.copyfileobj(open("new1.xml","r"),open("new3.xml","w"))
 4 #拷贝文件
 5 shutil.copyfile("new1.xml","new6.xml")
 6
 7 #压缩
 8 # shutil.make_archive("压缩包的文件名或路径","format 保存的格式,zip,gtar等","root_dir:要压缩的文件夹路径",
 9 #                     "owner:用户","group:组","logger:用于记录日志,通常是logging.Logger对象 ")
10
11 #解压缩  shutil对压缩包的处理是调用ZipFile和TarFile两个模块
12 import zipfile
13 #压缩
14 z=zipfile.ZipFile("aa.zip","w")
15 z.write("aa.log")
16 z.write("data.data")
17 z.close()
18 #解压
19 z=zipfile.ZipFile("aa.zip","r")
20 z.extractall()
21 z.close()
22
23 import tarfile
24
25 # 压缩
26 tar = tarfile.open(‘your.tar‘,‘w‘)
27 tar.add(‘/Users/wupeiqi/PycharmProjects/bbs2.log‘, arcname=‘bbs2.log‘)
28 tar.add(‘/Users/wupeiqi/PycharmProjects/cmdb.log‘, arcname=‘cmdb.log‘)
29 tar.close()
30
31 # 解压
32 tar = tarfile.open(‘your.tar‘,‘r‘)
33 tar.extractall()  # 可设置解压地址
34 tar.close()

时间: 2024-10-29 04:32:54

常用的基础模块介绍的相关文章

Ansible 安装 及 基础模块介绍

ansible 介绍 Ansible基于Python开发,集合了众多优秀运维工具的优点,实现了批量运行命令部署程序.配置系统等功能.默认通过SSH协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署变得更加简单.可同时支持多台主机并行管理,使得管理主机更加便捷. ansible 安装 在管理端与 被管理端都要安装 yum install -y epel-release ##安装epel源 yum install ansible -y ansible --versio

IIS7 常用模块介绍说明

1.1.0   IIS常用的功能模块介绍: 1)         静态内容:可发布静态 Web 文件格式,比如 HTML 页面和图像文件. 2)         默认文档:允许您配置当用户未在 URL 中指定文件时供 Web 服务器返回的默认文件. 3)         目录浏览:允许用户查看 Web 服务器上的目录的内容.当用户未在 URL 中指定文件以及禁用或未配置默认文档时,使用“目录浏览”在目录中提供自动生成的所有目录和文件的列表.建议将该功能禁用. 4)         HTTP错误:

python基础31[常用模块介绍]

python基础31[常用模块介绍] python除了关键字(keywords)和内置的类型和函数(builtins),更多的功能是通过libraries(即modules)来提供的. 常用的libraries(modules)如下: 1)python运行时服务 * copy: copy模块提供了对复合(compound)对象(list,tuple,dict,custom class)进行浅拷贝和深拷贝的功能. * pickle: pickle模块被用来序列化python的对象到bytes流,从

QT基础(六)QT5 常用模块介绍

Qt 5 与 Qt 4 最大的一个区别之一是底层架构有了修改.Qt 5 引入了模块化的概念,将众多功能细分到几个模块之中.Qt 4 也有模块的概念,但是是一种很粗的划分,而 Qt 5 则更加细化.本文主要对 Qt 5 的模块进行一个简单的介绍,以便以后大家需要哪些功能的时候知道到哪个模块去寻找. Qt 5 模块分为 Essentials Modules 和 Add-on Modules 两部分.前者是基础模块,在所有平台上都可用:后者是扩展模块,建立在基础模块的基础之上,在能够运行 Qt 的平台

NodeJS常用模块介绍

收集了NodeJS开发中常用的一些模块. MVC框架 - Express Express 是轻量灵活的Nodejs Web应用框架,它可以快速地搭建网站.Express框架建立在Nodejs内置的Http模块上,并对Http模块再包装,从而实际Web请求处理的 功能.它支持多种前端模板,如Jade, EJS等.它是T.J大神的作品,不过已经交由其它团队维护了. Koa是T.J大神的另外一个作品,号称下一 代NodeJS web框架.使用 koa 编写 web 应用,通过组合不同的 generat

Python3 基础 —— 模块 Module 介绍

1.模块的作用 在交互模式下输出的变量和函数定义,一旦终端重启后,这些定义就都不存在了,为了持久保存这些变量.函数等的定义,Python中引入了模块(Module)的概念.一个Python模块其实就是一个脚本文件,具有后缀".py",例如 hello.py 就是一个模块文件名,和普通文件一样可以被永久保存在本地存储磁盘中. 2.模块的内容 Python模块中存放的是一些程序代码,例如,变量定义.函数定义或是代码语句.下面是hello.py模块的内容,其中有一个变量 a,一个函数 fun

Ansible 自动化运维工具之inventory和常用模块介绍

一.inventory介绍 前面我们介绍过ansible的hosts文件是存放被管理主机的,被管理主机比较少的情况下,直接在hosts中定义即可,但是以后很定会管理多台主机,而ansible可管理的主机集合就叫做inventory.在ansible中,描述你主机的默认方法是将它们列在一个文本文件中,这个文件叫inventory文件. 一个简单的inventory文件可能只包含一组主机名的列表,如下: ftp.testansible.com samba.testansible.com mail.t

Ansible 之 概念和常用模块介绍

1  概述 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括如下的特性: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inventory:

Ansible的安装、配置及常用模块介绍

Ansible的安装.配置及常用模块介绍 ansible安装方式 1. ansible安装常用两种方式,yum安装和pip程序安装 这里提供二种安装方式,任选一种即可: 1.使用yum安装 yum install epel-release -y yum install ansible –y 2. 使用pip(python的包管理模块)安装 pip install ansible   #如果没pip,需先安装pip.yum可直接安装: yum install python-pip pip inst