zoukankan      html  css  js  c++  java
  • 常用的基础模块介绍

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

    模块二: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)))
    View Code

    模块三: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)))
    View Code
     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下为"	
    ",Linux下为"
    "
    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所指向的文件或者目录的最后修改时间
    View Code

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

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

    模块五: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())
    View Code
     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())
    View 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)
    View Code
     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)
    View Code

    模块七:正则表达式  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,172560199@sina.com"
    33 m=re.search("((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)",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_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+",str_ip)
    38 print("匹配到的邮箱是:",m2.group())
    View Code

    模块八: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"))
    View Code

    模块九: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="	")
    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)
    View Code

    模块十: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)
    View Code

    模块十一: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")
    View Code

    模块十二: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()
    View Code
  • 相关阅读:
    C++右值引用的参考
    U3D 文档 GPU INSTANCING
    UNITY statistic中的 SetPass和Batches
    时间复杂度
    转,数组遍历的三种方式
    bug纪录:PhotonServer-14052: 17:14:09.033
    关于.net standard 与 .net core, net framework
    【转】未能加载文件或程序集或它的某一个依赖项,系统找不到指定的文件
    C# 计时函数精度测试
    一张图看懂dex
  • 原文地址:https://www.cnblogs.com/eric8899/p/6014148.html
Copyright © 2011-2022 走看看